@AndyProwl はすでに解決策を提供しています。これをここにコピーして、私のものと比較しやすくします。
std::string hiThere = "dlrow olleh";
for ( int i = hiThere.length() - 1; i >= 0; i--) {
std::cout << hiThere[i];
}
完全を期すために、そのように書くこともできます (また、その形式に遭遇する可能性が高いため、その形式を知っておく価値があります。これはAndy の解決策とまったく同じであることに注意してください)。
std::string hiThere = "dlrow olleh";
for (size_t i = hiThere.length(); i--; ) {
std::cout << hiThere[i];
}
いくつかのコメント:
- 負の値はもう必要ないので、符号なし (size_t) インデックスを使用できるようになりました。文字列が INT_MAX よりも長い場合、Andy のソリューションで何が起こるのでしょうか? (これが起こる可能性は非常に低いです。それは認めますが、それでも...) このフォームは、この小さな (実際には、衒学的な) ジレンマを解決します。
- 終了条件と後付けは一緒にマージされるため、後付けは空のままになります。
- 私たちが慣れ親しんでいるほとんどのループとは異なり
for
、ここでは、通常のプレデクリメント演算子ではなく、ポストデクリメント演算子を使用することが非常に重要です。すべてがそれに依存しています。
しかし、正直なところ、STLの残りの部分との一貫性が高いという理由だけで、イテレータを使用した@woytazのソリューションを好みます。