我正在学习std::string
,我想:
输出新字符串
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int main()
{
string myStr;
getline(cin,myStr);
if (myStr.begin() != myStr.end())
{
for (auto it = myStr.begin(); it != myStr.end() ; it += 2)
*it = toupper(*it);
}
cout << myStr;
system("pause");
return 0;
}
但输入后我收到错误here:
答案 0 :(得分:2)
it += 2
,则 it != myStr.end()
会使您超出界限。因此解除引用
*it = toupper(*it);
是未定义的行为。
it += 2
永远不会为你的循环终止条件提供myStr.end()
的精确迭代器值。
至于你的评论:
那我该如何解决呢?
保持简单易懂,例如使用像
这样的东西for (size_t i = 0; i < myStr.length() ; ++i) {
if(i % 2) { // Every second letter ...
myStr[i] = toupper(myStr[i]);
}
}