如何使用迭代器?
how to use 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() && !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);
相关文章:
- 使用std::multimap迭代器创建std::list
- 使用迭代器时如何访问对象在向量中的位置?
- 为什么我不能在 c++ 中"map"的迭代器中使用"+1"?
- 如何将 std::num_put 与自定义迭代器一起使用?
- 使用 std::vector<Particle> 粒子;函数 .at() 不能与迭代器一起使用,它作为 for 循环中的参数
- C 迭代器范围使用指针到数组
- 使用迭代器时使用 ++ 和 +1 的区别
- 将迭代器映射到特定字段上的迭代器(可以使用 Boost)
- 如何与迭代器一起使用
- 如何将反向迭代器与作为代理的迭代器一起使用
- C++ - 如何在自定义模板化数据容器中的迭代器上使用 advance() 启用 ADL
- 哪些 STL 算法可以安全地与单通道输入迭代器一起使用
- map的begin迭代器无法使用c++
- C++映射/设置迭代器在使用多映射时出现不可增加的错误
- 如何告诉 advance() 在输入迭代器上使用 += 运算符(如果它们不是随机访问)
- 在b树的自定义迭代器中使用操作符*出错
- "Unresolved overloaded function type"尝试将for_each与迭代器一起使用并在C++中发挥作用
- 如何在独立迭代器中使用thrust::transform ?
- 在使用STL的迭代器上使用UTF-8到UTF-32
- 将boost字符串算法与迭代器结合使用