将\字符插入字符串

时间:2016-05-16 19:17:23

标签: c++

我正在尝试将\ 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);
 }

4 个答案:

答案 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)

目的

为字符串中的每一个添加一个额外的反斜杠(用于另一个程序)

当前问题

  1. 示例字符串未正确转义(最简单的方法是使用原始字符串)
  2. for循环一次插入4个反斜杠,因此永远不会到达终点。
  3. 使用C ++ 11的解决方案

    这将为已经存在的每一个添加一个反斜杠:

    #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;
    }
    

    Result

    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