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

Searching for newline ' ' character within a string object

本文关键字:对象 字符 字符串 搜索 换行符      更新时间:2023-10-16

我有一个一般形式的字符串对象 string line = "yadayadanyadaya" .我按如下所示循环字符串,试图"捕获"换行符。

        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]);
             }
        }

如您所见,我循环遍历字符串字符,并将字符一个接一个地插入另一个称为缓冲区的对象中(与问题无关(。

在第一个 if 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]);
                    }
                }

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

string line;
getline(cin,line);

"" 不是包含后跟n的字符串。转义序列n表示单个字符,您可以使用

for (size_t i = 0; i < line.length(); i++)
     if (line[i] == 'n')
         // whatever

或者用好的老std::string::find.

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

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

i = i+1;

'' 是一个字符,而不是两个。

尝试:

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

我不确定您是在搜索字符"\"加"n"的序列还是换行符(其在 C 源文件中的表示形式确实是 ,但这对应于单个字节!(,但在这两种情况下,这应该没问题:

#include <iostream>
#include <string>
using namespace std;
int main() {
    string pattern("n");      //or, "\n", so n is actually '' plus 'n'
    string input="yadayadanyayda\nyadayada";
    size_t index;
    while((index=input.find_first_of(pattern))!=string::npos)
        input=input.substr(0, index)+input.substr(index+pattern.size());
    cout<<input;
}

本示例打印 yadayadayaydanyadayada ,这可能是您想要的。

string line = "yadayadanyadaya"中,"yadayada""yadaya"之间有一个字符。你是说"yadayada\nyadaya",你想把它转换成"yadayadanyadaya"吗?

' '应该是''.我猜你尝试过'',得到一个编译器错误,并认为你会尝试添加一些字符直到它编译?这是个坏主意。 ' ',如果它被编译器接受,将永远不会匹配。

还有一个问题:i = i+2;将 i 增加 2,但你随后转到i++,所以你总共将 i 增加 3。

代码有几个问题:

    如果你假设''
  1. 和'n'是两个不同的字符,如果''在代码的末尾,你就用完了数组!你需要把if条件

  2. 放在如果i<n-1">
  3. \"和"n"通常是一个字符,因此您要测试line[i] == 'n'

  4. 你的 i=i+2 是错误的,因为你总是通过 for 循环本身递增 1,所以在这种情况下只有 i++ 就可以了

更根本的是,您实际上想要实现什么?您只是想从字符串中删除 吗?为什么不使用标准字符串替换函数!!!