此代码接受一个字符串,然后将字符串的偶数和奇数字符写为2个由空格分隔的单独字符串。我已经使用标准for循环解决了这个问题。但是我试图在它中使用基于范围的for循环而不是正常的for循环(在被Bjarne的2017 CPPCON主题演讲激活之后)。正常for循环工作正常,我在下面的代码块中对它进行了评论。
问题是:代码用g ++ -std = c + 11命令编译,但偶数和奇数字符串出现乱码并读取像二进制文件。你能解释一下我做错了什么,到底发生了什么?非常感谢明确的解释。谢谢。
string S,even,odd;
cout << "Enter a string:\n";
cin.ignore(); // So that getline does not catch
//the eol character
getline(cin,S);
// for (int j=0; j<S.length(); j++){
// if(j==0 || j%2==0){even.push_back(S[j]);}
// else {odd.push_back(S[j]);}
// }
for (auto j : S){
if(j==0 || j%2==0){even.push_back(S[j]);}
else {odd.push_back(S[j]);}
}
cout << "You wrote: " << S <<'\n';
cout << "Even(including 0) positioned character(s)
of " << S << " is(are) " << even <<'\n';
cout << "Odd positioned character(s) of " << S <<
" is(are) " << odd <<'\n';
答案 0 :(得分:1)
基于范围的for循环遍历容器的元素。代码中的'j'是字符串中的字符,而不是索引。试试这个:
for (auto character : S)
{
if (even.length() > odd.length())
{
odd.push_back(character);
}
else
{
even.push_back(character);
}
}