在字符串对象中搜索换行符'\n'

Vai*_*los 5 c++

我有一般形式的字符串对象string line = "yadayada\nyadaya".我循环遍历字符串,试图"捕获"换行符.

        for (int i = 1; i < line.length(); i++)
        {
             if ( ( line[i]== ' \ ') && ( line[i+1] == 'n' ) ) 
             {
                  buffer.insertChar('\n');
                  i = i+2;
             }
             else
             {

                  buffer.insertChar(line[i]);
             }

        }
Run Code Online (Sandbox Code Playgroud)

正如你所看到我循环遍历字符串字符,我将字符逐个插入另一个称为缓冲区的对象(与问题无关).

在第一个,如果if ( ( line[i]== ' \ ') && ( line[i+1] == 'n' ) )我试图"捕获"换行符,并在内部,如果正在我将索引i递增2,以便它将在下一个循环中跳过字符'\'和'n'.问题是这个循环从不捕获换行符但总是在缓冲区中插入两个单独的字符'\'和'n'.

重要说明:我使用索引i = 1启动循环,因为第一个字符就像一个命令,正在被特殊处理.

更新:我修改了上面的代码,但仍然没有运气我想要完成的

                for (int i = 1; i < line.length(); i++)
                {
                    if ( (line[i]== '\n') )   
                    {

                        buffer.insertChar('\n');
                        i = i+1;
                    }
                    else
                    {

                        buffer.insertChar(line[i]);
                    }

                }
Run Code Online (Sandbox Code Playgroud)

更新#2:如果这有助于字符串来自用户的输入,如下所示:

string line;
getline(cin,line);
Run Code Online (Sandbox Code Playgroud)

Fre*_*Foo 9

"\n"不是包含\后跟a的字符串n.转义序列\n表示单个字符,您可以查找该字符

for (size_t i = 0; i < line.length(); i++)
     if (line[i] == '\n')
         // whatever
Run Code Online (Sandbox Code Playgroud)

还是老了std::string::find.


c0d*_*0da 3

而不是( line[i]== ' \ ') && ( line[i+1] == 'n' ),尝试

if ( line[i]== '\n')

和

i = i+1;