编辑字符串以包含括号 c++ 之间的变量
Editing a string to include variables between brackets c++
我有一个字符串filename
其中包含文件名,例如 example.plt.我想通过在字符串末尾的两个括号之间插入一个整数变量来编辑此字符串,如下所示: example.plt --> example(1(.plt
我尝试的是删除文件扩展名 (.plt(,添加带有整数变量的括号并重新添加扩展名,但我似乎无法正确获得语法:
filename = filename.erase(filename.length() - 4); //example.plt - .plt = example
filename = filename + "(" + i + ")" + ".plt"; //example + ( + i + ) + .plt = example(i).plt
这个想法是,当我以后创建一个名为 example.plt 的文件时,我不会覆盖现有的 example.plt,而是创建一个新文件 example(1(.plt。如果有人可以帮助我找到正确的语法或建议一种更优雅的方式来做到这一点,我将不胜感激。
如果i
是int
,则需要先使用to_string
方法将其转换为string
。
filename = filename + "(" + std::to_string( i ) + ")" + ".plt";
正如PaulMcKenzie在评论中所说,您应该使用filesystem
来获取文件名,扩展名等。
例:
#include <filesystem>
#include <iostream>
#include <string>
int main() {
std::string filename = "apples/oranges/example.plt";
std::filesystem::path path = filename;
std::string name = path.stem().string();
name += '(' + std::to_string( 1 ) + ')' + path.extension().string();
path.replace_filename( name );
std::cout << path; // output: apples/oranges/example(1).plt
}
这是您描述的工作示例
#include#include<字符串>int main(( { std::string 文件名 = "example.plt"; 文件名 = 文件名.erase(文件名.长度(( - 4(; 文件名 = 文件名 + "(" + std::to_string(2( + "(.plt";您可以将 2 替换为 i std::cout <<文件名<<std::endl; 返回 0; }字符串>
使用输出:
example(2).plt
如果这不起作用,发布您在尝试编译时遇到的错误或代码输出的内容可能会有所帮助。
您必须将i
转换为字符串。
你可以使用例如std::to_string((来做到这一点。
#include<字符串>文件名 =... 文件名+="("+std::to_string(i(+"(.plt">字符串>
如果您有 C++ 17 或更大,使用 std::filesystem,名称的(x)
尾的生成可以是泛型的。
#include <filesystem>
#include <string>
#include <iostream>
namespace fs = std::filesystem;
std::string generate_name(const std::string& name, int value)
{
std::string ext = fs::path(name).extension().generic_string();
std::string stem = fs::path(name).stem().generic_string();
return stem + "(" + std::to_string(value) + ")" + ext;
}
int main()
{
std::string name = "filename.plt";
std::cout << generate_name(name, 1) << "n";
std::cout << generate_name(name, 2) << "n";
std::cout << generate_name("another_name.txt123", 1) << "n";
}
输出:
filename(1).plt
filename(2).plt
another_name(1).txt123
请注意,无论扩展长度如何,这现在都有效。
相关文章:
- 类与私有变量的其他类之间的线程安全性
- 编辑字符串以包含括号 c++ 之间的变量
- 子目录之间的 CMAKE 共享变量
- 在.cpp文件之间传递全局字符串变量?
- 我的 c++ 程序似乎没有发现字符串和我拥有但输入使用 getline 的变量之间的比较
- 如何在不同的CMakeList.txt之间共享变量?
- C++ 编译时在两个变量之间交替
- 创建变量之间的运算符排列
- 通过require在不同的Lua状态之间共享全局变量
- 成员变量的不同"kinds"之间的区别
- 互锁变量访问(在布尔值上)和 std::atomic_flag 之间的区别
- 在没有外部文件的情况下在应用会话之间保存变量
- 计算两个uint8_t变量之间差值的最快方法是什么?
- 有没有办法在两个共享对象之间使用相同的全局变量?
- lambda 表达式中引用捕获的 constexpr 变量和非显式捕获的 constexpr 变量之间的区别
- 在成员函数之间传递const变量为数组的索引
- 直接为浮点变量分配十六进制整数与通过指针转换分配之间的区别
- 如果两个线程调用同一个函数,但函数中的所有变量都是局部变量,我还需要担心线程之间共享数据吗?
- 使用文件锁定的进程之间的条件变量
- C++ 静态成员变量 - 文件之间的访问