21xrx.com
2024-09-19 09:51:27 Thursday
登录
文章检索 我的文章 写文章
C++ 实现字符串多余空格去除
2023-06-22 09:05:08 深夜i     --     --
C++ 字符串 多余空格 去除

在日常编程中,字符串处理是一项非常重要的技能。在处理字符串的过程中,我们经常会遇到需要去除多余空格的情况。这在文本处理和字符串比较时尤为常见。C++作为一种强大的编程语言,提供了多种方法来去除字符串中的多余空格。

方法一:使用循环遍历字符串

我们可以遍历输入字符串,并跳过多余的空格。具体来说,我们可以考虑从字符串的开头依次检测每一个字符,如果该字符为空格,则循环向右移动,直到找到下一个非空格字符。

具体代码如下:


string removeSpaces(string input) {

  int n = input.length();

  int i = 0, j = -1;

  bool flag = false;

  while (++j < n && input[j] == ' ');

  while (j < n) {

    if (input[j] != ' ') {

      if ((i > 0 && input[i - 1] == ' ') || flag == true)

        input[i++] = ' ';

      input[i++] = input[j];

      flag = false;

    }

    else

      flag = true;

    j++;

  }

  return input.substr(0, i);

}

在上述代码中,我们从左向右跳过了所有的开头空格,然后继续遍历输入字符串。我们使用了两个变量i和j来遍历字符串,并复制非空格字符。同时,我们使用一个flag变量来表示我们是否跳过了多余的空格。一旦我们找到了非空格字符,则将其复制到输出字符串中,如果我们在前面已经跳过了一个或多个空格,则需要在该字符之前添加一个空格。

方法二:使用stringstream对象

另一种处理多余空格的方法是使用stringstream对象。stringstream对象的目的是为了把字符串当成流进行处理,它可以通过运算符>>和<<来将字符串转换为其他数据类型。在去除字符串中多余空格的过程中,我们可以使用stringstream对象把字符串中的单词逐一取出来,然后放入到一个vector容器中,最后再将vector容器重新组合为一个新字符串,从而去除多余空格。

具体代码如下:


string removeSpaces(string input) {

  vector<string> words;

  stringstream ss(input);

  string word;

  while (ss >> word) {

    words.push_back(word);

  }

  string result = "";

  for (int i = 0; i < words.size(); i++) {

    result += (i == 0 ? "" : " ") + words[i];

  }

  return result;

}

在上述代码中,我们首先定义了一个vector对象来存储输入字符串中的单词,使用stringstream对象把输入字符串转换为一个流,并通过运算符>>逐个读取其中的单词,并将它们存储在vector容器中。在最后一步中,我们遍历vector容器,将单词逐一拼接成一个很字符串,这个字符串中会去除多余的空格。

在实际编程中,我们可以根据具体情况选择上述其中一种方法来去除字符串中的多余空格。这些方法不仅精简了代码,提升了程序的可读性和可维护性,而且也赋予了我们处理字符串的更灵活多变的选择。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复