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