如何在字符串中的每个字符后添加反斜杠?
How do I add a backslash after every character in a string?
我需要将文字文件路径(C:/example.txt)转换为与各种WinAPI注册表函数(C:/example.txt)兼容的文件路径,我不知道如何去做。
我已经将其分解为必须在特定字符(在本例中为/)之后添加反斜杠,但我完全卡住了。
指南和代码示例将非常感谢。
我正在使用c++和VS2012。
在c++中,字符串由单个字符组成,如"foo"
。字符串可以由可打印字符(如字母表中的字母)或不可打印字符(如回车键或其他控制字符)组成。
在填充字符串时,不能以正常方式键入这些不可打印字符中的任何一个。例如,如果你想要一个包含"foo",然后是制表符,然后是"bar"的字符串,你不能通过输入
来创建它: foo
TAB bar
因为这只会插入那么多空格——它实际上不会插入TAB字符。
您可以通过"转义"它们来指定这些不可打印的字符。这是通过在字符代码后面插入反斜杠字符()来完成的。在上面的字符串的情况下,TAB由转义序列
t
表示,因此您可以写:"footbar"
.
字符本身不是一个不可打印的字符,但是c++(和C)认为它是特殊的——它总是表示转义序列的开始。要在字符串中包含字符"",必须使用
\
对其本身进行转义。
在c++中如果你想要一个包含:
的字符串c: windows foo 酒吧
使用转义序列来编码:
string s = "c:\windows\foo\bar"
\不是两个字符,是一个字符:
for(size_t i = 0, sz = sPath.size() ; i < sz ; i++)
if(sPath[i]=='/') sPath[i] = '';
但是要注意,有些api使用而有些使用/,所以您需要检查在哪些情况下使用此替换
如果您确实想用两个反斜杠替换每一个正斜杠的出现,那么这个应该可以完成工作:
size_t i = str.find('/');
while (i != string::npos)
{
string part1 = str.substr(0, i);
string part2 = str.substr(i + 1);
str = part1 + R"(\)" + part2; // Use "\\" instead of R"(\)" if your compiler doesn't support C++11's raw string literals
i = str.find('/', i + 1);
}
编辑:注:如果我误解了这个问题,你的意图实际上是用一个反斜杠替换每一个正斜杠的出现,那么有一个更简单和更有效的解决方案(正如@RemyLebeau在评论中指出的):
size_t i = str.find('/');
while (i != string::npos)
{
str[i] = '';
i = str.find('/', i + 1);
}
或者更好:
std::replace_if(str.begin(), str.end(), [] (char c) { return (c == '/'); }, '');
- 只能向C++添加一定数量的字符
- 如何在C++中为字符串添加字符?
- 如何将字符添加到已经大小的数组中?
- 向字符串添加字符
- 如何编写模板函数来添加整数但连接字符串和字符类型?
- 在字符串中的字符前添加空格C++插入函数
- QT - C++ 向 QString 添加字符' " '
- 添加字符时,编译器会停止优化未使用的字符串
- 如何在预定义字符串中添加字符
- 如何在C++中获取子字符串并在字符串之间添加字符
- 宏在字符串末尾添加字符而不传递源字符串
- 如何在BST C ++中添加字符类型
- 向字符数组 c++ 添加字符
- 向char*[]添加字符时出现问题
- fstream正在为我的文件的每一行添加字符
- 在C++中向字符串添加字符
- 在C++中的其他字符之间添加字符
- 读取文本文件,然后添加字符到列表
- 向QString中的每行添加字符
- 如何添加字符缓冲区的STD字符串放置在结构体