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);