c++ 迭代器,使用while时陷入死循环?

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s("some string");
    if (s.begin() != s.end()) {
        auto it = s.begin();
        while (it != s.end() && !isspace(*it))
            *it = toupper(*it);
            it++;
        cout << s << endl;
    }
    return 0;
}

在学习c++primer迭代器这一节时,要求是把上面程序的字符串s全部改为大写,书上用的是for循环,我试着使用while,但是编译通过了, 执行的时候不显示结果,ctrl+D 没反应, 只能ctrl+Z或ctrl+C强制结束。
想问一下, 我的程序有是语法上的错误, 还是迭代不支持while
谢谢

阅读 3.2k
1 个回答
#include <iostream>
#include <string>
using namespace std;

int main() {
    string s("some string");
    if (s.begin() != s.end()) {
        auto it = s.begin();
        while (it != s.end()) {
            *it = toupper(*it);
            it++;
        }
        cout << s << endl;
    }
    return 0;
}

经过评论区@zhenguoli 的提示改正了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题