このコードでは、文字列を受け取り、文字列の偶数および奇数の文字をスペースで区切られた2つの別々の文字列として書き出します。私は標準forループを使用して問題を解決しました。しかし、私は、Bjarneの2017 CPPCON基調演説を受けてから、通常のforループの代わりに、範囲ベースのforループを使用しようとしています。通常のforループは正常に動作し、次のコードブロックでコメントしています。C++の範囲ベース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';
デバッガを使用してコードをステップ実行する方法が必要なようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。さらに読む:[小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) – NathanOliver
@NathanOliverありがとう!ここの答えは非常に参考になります。 – anotherone
forの範囲は、期待どおりに動作しません。実行中のインデックスではなく、コンテナの要素を反復処理します。あなたのケースでは、文字列の実際の文字 –