如何使用迭代器?

Mru*_*lji 0 c++ string iterator for-loop if-statement

我正在尝试使用迭代器更改字符串中的字符。它会更改空格前的字符,但会删除该空格后的字符。

发生了什么事?

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s;
    cout<<"Enter a string : ";
    cin>>s;

    for (auto it = s.begin(); it != s.end() && !isspace(*it);++it)
      *it = toupper(*it);

    cout<<s; // capitalize the current character
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

输入字符串:abc abc
ABC

Vla*_*cow 5

for语句中的条件不正确

for (auto it = s.begin(); it != s.end() && !isspace(*it);++it)
 *it = toupper(*it);
Run Code Online (Sandbox Code Playgroud)

遇到空白时,循环停止其迭代。

您应该将第二个子表达式移入循环体内的if语句中。例如

for (auto it = s.begin(); it != s.end();++it)
 if ( !isspace( ( unsigned char )*it) ) *it = toupper( ( unsigned char )*it);
Run Code Online (Sandbox Code Playgroud)

而不是声明

cin>>s;
Run Code Online (Sandbox Code Playgroud)

使用

std::getline( std::cin, s );
Run Code Online (Sandbox Code Playgroud)