为什么代码中没有处理每个逗号字符?
Why isn't every comma character tackled in the code?
下面是我试图用来从字符串中删除( ,
(的代码。但是我发现,有一个以上有关的炭是并排的,这是一个问题。
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s; cin >>s;
for (int i=0; i<=s.length()-1; i++)
if (s.at(i)==',')
{s.erase(s.begin()+i); cout<<s<<endl;}
cout<<s;
return 0;
}
请注意,我在每个操作后都产生了结果字符串,因此更容易理解。
这是一排以上(,
(的输出:
ff,,f,,ffff,,,,ff,f,f.,fwer..ew,,,
ff,f,,ffff,,,,ff,f,f.,fwer..ew,,,
ff,f,ffff,,,,ff,f,f.,fwer..ew,,,
ff,f,ffff,,,ff,f,f.,fwer..ew,,,
ff,f,ffff,,ff,f,f.,fwer..ew,,,
ff,f,ffff,,fff,f.,fwer..ew,,,
ff,f,ffff,,ffff.,fwer..ew,,,
ff,f,ffff,,ffff.fwer..ew,,,
ff,f,ffff,,ffff.fwer..ew,,
ff,f,ffff,,ffff.fwer..ew,
ff,f,ffff,,ffff.fwer..ew,
您必须有条件地增加索引。查看ff,,f
-
s[0]
是f
-
s[1]
是f
-
s[2]
是,
->删除,
- 现在
s
是ff,f
,s[3]
是f
,,但s[2]
是,
要解决此问题,当当前字符为不是 ,
。
for (int i = 0; i < s.length(); ) {
if (s.at(i) == ',') {
s.erase(s.begin() + i);
cout << s << endl;
} else {
// current character is not ','
++i;
}
}
如果您的目标是用字符串擦除所有逗号,那么最简单的方法是使用std ::从<algorithm>
标头中删除。
#include <algorithm>
#include <string>
#include <iostream>
int main()
{
std::string s = "This,,,,string,,contains a,,,,lot,of,,commas,,,";
s.erase(std::remove(s.begin(), s.end(), ','), s.end());
std::cout << s;
}
实例示例
上面的代码消除了编写for
循环并一次删除字符的需要。您当前使用for
循环并一次删除单个逗号字符的方法不如上述代码那样有效。
remove
算法实际上并未删除项目,而是将其移至容器的末端,从而将迭代器返回到"删除"项目的开头。要求erase
在容器末端对元素进行最终删除。
另一个选项是向后迭代字符串,这样您就不需要有条件的迭代,因为其余部分要检查移动。
这对于任何"通过收集进行迭代,检查每个项目并在必要时删除"类型的东西可能是一个很好的模式。
for (int i = s.length()-1; i >=0; i-- ) {
if (s.at(i) == ',') {
s.erase(s.begin() + i);
cout << s << endl;
}
}
相关文章:
- 如何像在 C++ 中处理数组一样对 .txt 文件中的字符进行寻址?
- 在处理任何字符大小的模板中使用字符串文本
- 我如何处理有关输入的字符串大小超过字符数组设置大小的错误?
- 异常处理:如果用户输入不是三个特定字符之一
- 如何正确处理渲染大小为 >= 2B 的 utf-8 字符?
- 用wchar_t处理 unicode 字符好吗?它不会引起任何问题吗?
- 如何在C++中处理多维字符串 VECTOR 的字符?
- 使用独立的 c++ 程序处理用 C 编写的字符设备驱动程序
- 跨平台套接字发送,Linux 上的缓冲区常量无效* Windows上的常量字符*,最佳处理方式
- 抛出字符但捕获整数:如何处理异常的促销和转化
- Qt5 QProcess 处理具有"special"字符的参数
- 为什么代码中没有处理每个逗号字符?
- 当我们使用字符串而不是字符数组时如何处理字符串的字符
- 通过多线程处理确定每个字符在文件中出现的次数
- 为什么在指针和数组的情况下,字符数组的处理方式不同
- 我在处理字符时遇到麻烦
- 处理字符到QString转换中的ASCII字符
- 当按下shift时,对编辑文本控件进行子类处理以接受小写字符
- 如何逐个字符处理 UTF8 wxString
- Std::cout将uint8_t作为字符处理