正在搜索换行符'n'字符串对象中的字符
Searching for newline ' ' character within a string object
我有一个一般形式的字符串对象 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。
代码有几个问题:
- 如果你假设''
和'n'是两个不同的字符,如果''在代码的末尾,你就用完了数组!你需要把if条件
放在如果\"和"n"通常是一个字符,因此您要测试
line[i] == 'n'
。你的 i=i+2 是错误的,因为你总是通过 for 循环本身递增 1,所以在这种情况下只有 i++ 就可以了
i<n-1
">更根本的是,您实际上想要实现什么?您只是想从字符串中删除 吗?为什么不使用标准字符串替换函数!!!
- C++将常量字符* 指针数组传递给对象
- cin 对象如何根据用户需要将字符转换为不同类型的字符?
- C++包含使用 unique_ptr 的字符数组的对象
- 如何查看复杂度为 O(1) 的字符串流对象中的最后一个字符
- 从文件对象的当前位置删除字符
- C 字符串对象错误字符
- 如何使用ISTream对象输入多个字符到对象的数组中?(and 0作为哨兵值.下面的我的代码将无效)
- 字符指针对象和相应的字符数组元素比较
- 如何获得具有字符和对象的线条功能
- 你能对指向另一个对象的字符*进行算术吗?
- 使用提升序列化将类对象转换为矢量无符号字符<>
- 有可能在同一个字符序列上有一个类似函数的宏和一个类似对象的宏吗
- 通过常量字符 * 构造函数将 false 转换为对象
- 如何创建具有4个字段和每个字段9个字符长度的矢量对象
- 对象数组作为链表中的字符数组 - 我对对齐的假设是否有效
- 将文件的常量字符* 地址传递给 ifstream 对象的问题
- 如何从包含 OpenSSL 中的公钥的字符数组中获取 RSA* 对象
- 为什么全局对象构造函数只打印 Arduino 中的前 2 个字符
- 如何在不复制和保留 std::string 对象的情况下获得 C++ std::string 字符数据的所有权
- 输出对象中唯一字符的数量