编辑字符串以包含括号 c++ 之间的变量

Editing a string to include variables between brackets c++

本文关键字:之间 变量 c++ 字符串 包含括 编辑      更新时间:2023-10-16

我有一个字符串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。如果有人可以帮助我找到正确的语法或建议一种更优雅的方式来做到这一点,我将不胜感激。

如果iint,则需要先使用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

请注意,无论扩展长度如何,这现在都有效。