-2

私はプログラミングにまったく慣れていないので、これが正しいものではないかもしれません。私は(最終的に)達成した効果を得ようとしていじっていました. 何よりも練習用ですが、他に方法はないかと考えました。

#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string str1="Don't even think about it!";
    string str2;
    string str3;
    string str4 = "";

    for (int i = 0; i < str1.length(); i++){
        str2 = str1.substr (0, str1.length()-i);
        cout << str2 << str4;

        for (int x = str2.length() - 1; x >= 0; x--){
                str3 = str1[x];
                cout << str3;
        }

        str4 = str4 + "  ";
        cout << "\n";
    }
    getch();
    main();
    return 0;
    }

私が持っている質問はこれです: str4 でスペースを追加する代わりに、str3 を後方に配置した後、それを正当化できる独自の文字列を作成する方法はありますか?

4

3 に答える 3

3

逆文字列を取得するには、新しい文字列のコンストラクターに逆イテレーターを渡すだけです。

#include <iostream>
#include <string>
int main() {
    std::string s = "this is a test";
    std::string s_reversed(s.rbegin(), s.rend());
    std::cout << s << "\n" << s_reversed << "\n";
}

出力は次のとおりです。

$ g++ test.cc && ./a.out
this is a test
tset a si siht

あなたの問題に適用されます:

#include <iostream>
#include <string>
int main() {
    std::string s = "this is a test";
    for (auto i = s.length(); i > 0; i--) {
        std::cout << s;
        std::cout << std::string(s.rbegin(), s.rend());
        std::cout << '\n';
        s[i-1] = ' ';
    }
}

標準ライブラリには、文字列などのコンテナを逆にするアルゴリズムもあることに注意してくださいstd::reverse()

参考のため:

于 2013-07-09T07:24:57.460 に答える
0

まず、変数の名前を変更して、何を達成しようとしているのかがより明確になるようにします。信じてください。2 か月もすれば、このコードが実際に何をしているのかわからなくなるでしょう。提案:

str1 -> baseString

str2 -> forwardsClippedString

str3 -> backwardsClippedString

str4 -> gapString

これらの名前は良くないかもしれませんが、str1、...、str4 よりも優れていると思います。

次に、内部ループの別のメソッドを作成します。その後、外側の for ループの別のメソッドを作成します。はい、main() はまったく複雑ではありません。

最後に、main を再帰的に呼び出す代わりに、while ループを実行することをお勧めします。よろしければ、無限の 1 つです (ただし、1 つのキーがループを終了するとよいでしょう)。

于 2013-07-09T07:00:43.640 に答える