如何使用c++将字符串中出现的空白替换为下划线

How to replace an occurrence of whitespace in a string with an underscore using c++?

本文关键字:空白 替换 下划线 c++ 何使用 字符串      更新时间:2023-10-16

如何用下划线替换(字符串中)每次出现的空白?

我只能使用以下标准标题:

  • <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] = '_';

注意几点:

  1. 您希望使用isspace,而不是直接与空格字符进行比较。如果你这样做,你会错过标签之类的东西
  2. 您希望在传递给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()"的通用解决方案:替换所有"空白"字符。