C++ 如何使用迭代器?

C++ 如何使用迭代器?,c++,string,for-loop,if-statement,iterator,C++,String,For Loop,If Statement,Iterator,我正在尝试使用迭代器更改字符串中的字符。它更改空白前的字符,但删除空白后的字符 出什么事了 #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() &&am

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

出什么事了

#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;
}
#包括
#包括
使用名称空间std;
int main()
{
字符串s;
沙发;
for(auto it=s.begin();it!=s.end()&&!isspace(*it);+it)
*it=toupper(*it);

coutfor语句中的条件不正确

for (auto it = s.begin(); it != s.end() && !isspace(*it);++it)
 *it = toupper(*it);
当遇到空白时,循环停止其迭代

应该在循环体中的if语句中移动第二个子表达式

for (auto it = s.begin(); it != s.end();++it)
 if ( !isspace( ( unsigned char )*it) ) *it = toupper( ( unsigned char )*it);
而不是声明

cin>>s;
使用


问题不在于迭代器。问题在于如何读取输入:

 cin>>s;
这将读取一个单词,即它将跳过前导空格,并读取所有内容直到下一个空格。如果要读取整行内容,请使用:

std::getline(std::cin, s);

如果
std::toupper
的区域设置版本可见,这不会解决OP的问题,也不会编译。您还应该向他显示C++14方式:
for(auto&C:s)if(…)c=…;
@Vlad来自莫斯科我希望循环在遇到空格后停止。我想知道为什么要删除空格后的字符?我不想一直到字符串的末尾。我只想更改空格前的字符。
 cin>>s;
std::getline(std::cin, s);