0

私は C++ を初めて使用し、問題が発生しました... for ループを使用して文字列から文字の配列を作成できないようです。たとえば、JavaScript では次のように記述します。

var arr = [];
function setString(s) {
    for(var i = s.length - 1; i >= 0; i--) {
       arr.push(s[i]);
    }
    return arr.join("");
}

setString("Hello World!"); //Returns !dlroW olleH

少し複雑であることは知っていますが、その方法についての背景知識は少しありますが、その構文はまだあまり慣れていません。

配列を使用してC ++でそれを行う方法はありますか? JavaScript で行うように、配列要素を 1 つの文字列に結合できますか?

お役に立てれば幸いです。前もって感謝します。もっと情報が必要な人がいたら、教えてください。投稿を編集します。

ところで、C++ での私のコードは現時点では非常に厄介ですが、私が何をしているのかについての考えはあります...私が試したことは次のとおりです。

function setString(s) {
    string arr[s.size() - 1];
    for(int i = s.size() - 1; i >= 0; i--) {
        arr[i] = s.at(i); //This is where I get stuck at... 
    //I don't know if I'm doing something wrong or not.
    }
}

誰かが私が間違っていることや、コードに何を追加または削除する必要があるかを教えてくれたらうれしいです。Code::Blocks でコンパイルされたコンソール アプリケーションです。

4

3 に答える 3

1

Astd::stringは、かなり薄いラッパーの下にある動的配列です。適切にコピーされるため、文字ごとにコピーする必要はありません。

文字配列が null で終了する場合 (つまり、最後の要素が a の場合'\0'):

const char* c = "Hello, world!"; // '\0' is implicit for string literals
std::string s = c; // this will copy the entire string - no need for your loop

文字配列が null で終了していない場合:

char c[4] = {'a', 'b', 'c', 'd'}; // creates a character array that will not work with cstdlib string functions (e.g. strlen)
std::string s(c, 4); // copies 4 characters from c into s - again, no need for your loop

使用できない場合std::string(たとえば、ANSI C の使用を余儀なくされている場合):

const char* c = "Hello, World!";
// assume c2 is already properly allocated to strlen(c) + 1 and initialized to all zeros 
strcpy(c2, c);

あなたのJavaScriptの例では、文字列を逆にしていますが、これは簡単に行うことができます:

std::string s = "Hello, world!";
std::string s1(s.rbegin(), s.rend());

さらに、ループを修正すると (C++ と Javascript の両方で) 反復を半分に削減できます (以下の疑似コード)。

string s = "Hello, world!"
for i = 0 to s.Length / 2
    char t = s[i]
    s[i] = s[s.Length - 1 - t]
    s[s.Length - 1 - i] = t

文字列の端を入れ替えて逆にします。N 個のアイテムをループする代わりに、最大 N / 2 個のアイテムをループします。

于 2013-10-25T18:37:12.147 に答える
1

関数の直接翻訳に最も近いもの:

string setString(string s) {
    string arr;
    for(int i = s.length() - 1; i >= 0; i--) {
        arr.push_back(s[i]);
    }
    return arr;
}
于 2013-10-25T18:01:39.430 に答える