0

これは、を使用して文字列を逆にする私のコードstd::stringです。しかし、それは機能しません。

#include <string>
#include <iostream>
using namespace std;

main()
{
   string input;
   int i, j;
   cout << "Enter a string: ";
   getline(cin,input);

   string output;
   for(i = 0, j = input.length() - 1; i < input.length(); i++, j--)
      output[i]=input[j];

   cout << "Reversed string = " << output;
   cin.get();
}

しかし、文字列出力を機能するように置き換えるchar output[100];と。std::stringでは、キャラクターの割り当てを許可しませんか?

4

5 に答える 5

10

std::string文字の割り当ては許可されますが、文字列の終わりを超えることはできません。std::string output;空の文字列を作成するためoutput[0]、文字列の終わりを超えています。

おそらくこれは学習演習ですが、それを実行するいくつかのツールについても知っているかもしれません。

#include <string>
#include <iostream>
#include <algorithm>

int main() {
    std::string input;
    std::getline(cin,input);
    std::cout << "input: " << input << '\n';

    std::reverse(input.begin(), input.end());
    std::cout << "reversed: " << input << '\n';
}

また:

#include <iterator>
...

    std::string output;
    std::reverse_copy(input.begin(), input.end(), std::back_inserter(output));
    std::cout << "reversed: " << output << '\n';

また:

    std::string output;
    std::copy(input.rbegin(), input.rend(), std::back_inserter(output));

また:

    std::string output(input.rbegin(), input.rend());
于 2012-05-21T09:05:27.970 に答える
5

出力のサイズを変更する必要があります。

output.resize(input.length());

または最初に設定された長さ:

string output(input.length(), ' ');

#include <string>
#include <iostream>
using namespace std;

main(){
string input;
int i,j;
cout << "Enter a string: ";
getline(cin,input);
string output(input.length(), ' '); // initially set sufficient length
for(i=0,j=input.length()-1;i<input.length();i++,j--)
output[i]=input[j];

cout << "Reversed string = " << output;
cin.get();
}

参照: std :: string

于 2012-05-21T08:43:32.577 に答える
4

outputは空の文字列であるため、output[i]無効なメモリ位置にアクセスします。outputを使用して文字列に文字を追加するだけoutput += input[j]です。

于 2012-05-21T08:41:18.453 に答える
3

リバースのSTLアルゴリズムを試してみませんか?

include <algorithm>
// ...
std::string str("hello world!");
std::reverse(str.begin(), str.end());
于 2012-05-21T09:11:07.897 に答える
1

構築後string output;の長さは0です。サイズをに変更する必要がありますinput.length()

string output;
output.resize(input.length());

サイズ変更はcharごとに追加するよりも高速ですが、最初にサイズを知っておく必要があります。

于 2012-05-21T08:43:26.580 に答える