我正在尝试将\ charcter插入到字符串中,以便我得到
C:\\用户\\戴夫\\桌面\\ XY.txt 代替 C:\ Users \用户乔治·\桌面\ XY.txt
这里是代码但由于某种原因它不起作用
string q="C:\Users\georg\Desktop\XY.txt";
char x='\\';
for (int i = 0; i < q.length(); ++i) {
if (q[i] == '\\')
q.insert(i,4,x);
}
答案 0 :(得分:5)
只需写下
string q="C:\\Users\\georg\\Desktop\\XY.txt";
或使用原始字符串文字
string q=R"(C:\Users\georg\Desktop\XY.txt)";
答案 1 :(得分:2)
您应该在引号内使用\来添加单个。所以你的第一线就是问题所在。它应该是
string q="C:\\Users\\georg\\Desktop\\XY.txt";
然后剩下的就行了。
编辑
经过补充说明后,我发现后续代码存在问题。它应该固定为以下内容:
for (int i = 0; i < q.length(); ++i) {
if (q[i] == '\\') {
q.insert(i,1,x);
i++;
}
}
让我解释一下,首先,你只需要1个额外的\所以插入的第二个参数应该是1.插入后,你需要跳过插入\,因此i ++;
答案 2 :(得分:1)
为字符串中的每一个添加一个额外的反斜杠(用于另一个程序)
for
循环一次插入4个反斜杠,因此永远不会到达终点。这将为已经存在的每一个添加一个反斜杠:
#include <iostream>
#include <string>
int main()
{
std::string q = R"(C:\Users\georg\Desktop\XY.txt)";
char x='\\';
for (int i = 0; i < q.length(); ++i) {
if (q[i] == '\\') {
q.insert(++i,1,x);
}
}
return 0;
}
#include <iostream>
#include <string>
int main()
{
//std::string q = R"(C:\Users\georg\Desktop\XY.txt)";
std::string q = "C:\\Users\\georg\\Desktop\\XY.txt";
char x='\\';
for (unsigned i = 0; i < q.length(); ++i) {
if (q[i] == '\\') {
q.insert(++i,1,x);
}
}
std::cout << q;
return 0;
}
C:\\Users\\georg\\Desktop\\XY.txt
答案 3 :(得分:0)
问题是第一行要么是raw string literal,要么是minNeighbors
:
\\
正如所写,它正在尝试将#include <string>
#include <iostream>
using namespace std;
int main()
{
string q = R"(C:\Users\georg\Desktop\XY.txt)"; // Raw (C++11 and higher)
string q2 = "C:\\Users\\georg\\Desktop\\XY.txt"; // Escaped
cout << q << "\n" // Outputs: C:\Users\georg\Desktop\XY.txt
<< q2 << "\n"; // Outpits: C:\Users\georg\Desktop\XY.txt
}
,\U
等用作特殊字符。
更新:要真正按照您的要求行事,您需要执行以下操作:
\g
如果用户输入#include <string>
#include <iostream>
using namespace std;
// From http://stackoverflow.com/a/15372760/201787
void replaceAll( string &s, const string &search, const string &replace ) {
for( size_t pos = 0; ; pos += replace.length() ) {
// Locate the substring to replace
pos = s.find( search, pos );
if( pos == string::npos ) break;
// Replace by erasing and inserting
s.erase( pos, search.length() );
s.insert( pos, replace );
}
}
int main()
{
string q = R"(C:\Users\georg\Desktop\XY.txt)"; // Raw (C++11 and higher)
string q2 = "C:\\Users\\georg\\Desktop\\XY.txt"; // Escaped
string q3;
std::cin >> q3; // Does not handle whitespace
replaceAll( q, "\\", "\\\\" );
replaceAll( q2, "\\", "\\\\" );
replaceAll( q3, "\\", "\\\\" );
cout << q << "\n"
<< q2 << "\n"
<< q3 << "\n";
}
,则打印以下内容
:
C:\Users\georg\Desktop\XY.txt