如何使用c++将字符串中出现的空白替换为下划线
How to replace an occurrence of whitespace in a string with an underscore using c++?
如何用下划线替换(字符串中)每次出现的空白?
我只能使用以下标准标题:
<iostream>
<string>
<cctype>
暴力方法:
std::string text = "Is the economy getting worse?";
const unsigned int length = text.length();
for (unsigned int i = 0; i < length; ++i)
{
if (text[i] == ' ')
{
text[i] = '_';
}
}
仅需要标头<string>
。
显而易见的方法似乎是:
for (size_t i=0; i<s.size(); i++)
if (isspace((unsigned char)s[i]))
s[i] = '_';
注意几点:
- 您希望使用
isspace
,而不是直接与空格字符进行比较。如果你这样做,你会错过标签之类的东西 - 您希望在传递给
isspace
之前将字符强制转换为unsigned char
。否则,它可能(而且经常)遇到基本ASCII字符集之外的字符问题(例如,带有重音符号/元音变音符的字母)
没有一个C++字符串方法可以做到这一点-您需要一个循环:
// C++ replace all
#include <cctype.h>
...
string string replaceChar(string str, char new_char) {
for (int i = 0; i < str.length(); ++i) {
if (isspace((unsigned char)str[i]))
str[i] = new_char;
}
return str;
}
如果你碰巧有一个以null结尾的C字符串,你可以这样做:
/* C replace all */
#include <ctype.h>
...
char *replaceChar (char *str, char new_char) {
char *p = str;
unsigned char c;
while (c = *p) {
if (isspace(c))
*p = new_char;
p++;
}
return str;
}
附录:使用"isspace()"的通用解决方案:替换所有"空白"字符。
相关文章:
- 模板参数替换失败,并且未完成隐式转换
- 无法通过空白将文本文件行分隔为矢量
- 如何用转义符替换字符串中的所有特殊字符
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 在一个读写器队列中,我可以用volatile替换原子吗
- 用符号版本替换对函数的所有调用
- 由cin中的字符串中未捕获空白引起的分割错误
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 替换基于地图的所有引用
- 按平均值替换数组中的元素
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 初始化 std::vector 替换为单大括号而不是双大括号
- 如何创建一个程序来替换单个空白/选项卡的多个空白/选项卡
- 将utf8编码的字符串转换为本地8位编码的字符串,并将无法确定的字符替换为空白
- 如何使用c++将字符串中出现的空白替换为下划线
- 将空白字符替换为 %20 的字符串,忽略所有尾随空格
- 如何用任意数量的空白替换空白
- 替换wxString, c++中的空白
- 在调用函数c++之后,用另一个字符替换空白