c++ - 在 C++ 中使用基于范围的 for 循环

标签 c++ string c++11 for-loop

我正在尝试编写一个程序,在 C++ 中使用基于范围的 for 循环来消除空格。例如,如果输入是“你叫什么名字?” ,输出应该是“你叫什么名字?”然而,当我运行下面的代码时,它给出的输出是“Whatisyourname?me?”,这是为什么呢?

int main()
{
    string s = "What is your name?";
    int write_index = 0;
    for (const char &c : s)
    {
        if (c != ' ')
        {
            s[write_index++] = c;
        }
    }
    cout << s << endl;
    system("pause");
}

最佳答案

在循环后添加如下语句

s.erase( write_index );

s.resize( write_index );

从字符串中删除多余的字符。

此类任务的一般方法如下

#include <algorithm>
#include <string>

//...

s.erase( std::remove( s.begin(), s.end(), ' ' ), s.end() );

关于c++ - 在 C++ 中使用基于范围的 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33480812/

相关文章:

c++ - 如何从 cmake(3.10 版本)将 CUDA 架构设置为 compute_50 和 sm_50?

c++ - 输入c++的解析行

c++ - 如何在 lambda 本身中获取 C++ lambda 函数的地址?

c++ - iterator::operator* 的标准接口(interface)返回的内容多于 T& 和 std::pair

c++ - 从第三方代码检查库版本

c++ - GLEW 1.10.0段错误

c++ - 是否可以为 constexpr 函数定义类型别名

正则表达式:如何匹配包含重复模式的字符串?

R:我的数据框有 2 列,每行都有一串数字,有没有办法拆分字符串并添加每列的值?

c++ - 向下转换从动态库返回的类型