如何使用迭代器?

how to use iterator?

本文关键字:迭代器 何使用      更新时间:2023-10-16

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

怎么了?

#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;
}

输出:

输入一个字符串:abc abc
ABC

for 语句中的条件不正确

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;

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

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

cin>>s;

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

std::getline(std::cin, s);
std::transform(s.begin(), s.end(), s.begin(), std::toupper);