7
int main()
{    
    string a;

    a[0] = '1';
    a[1] = '2';
    a[2] = '\0';

    cout << a;
}

このコードが機能しないのはなぜですか? 文字列を出力しないのはなぜですか?

4

5 に答える 5

7

a空だから。空の配列で同じことをしようとすると、同じ問題が発生します。ある程度のサイズを指定する必要があります:

a.resize(5); // Now a is 5 chars long, and you can set them however you want

または、インスタンス化するときにサイズを設定できますa

std::string a(5, ' '); // Now there are 5 spaces, and you can use operator[] to overwrite them
于 2012-12-12T02:36:06.563 に答える
3

まず、私はあなたが意味すると思いますstd::string

次に、文字列が空です。

3 番目に、 operator[] を使用して文字列内の要素を変更できますが、それを使用して要素が存在しない場所に挿入することはできません。

std::string a = "12";
a[0] = '3'; //a is now "32"
a[2] = '4'; //doesn't work

そのためには、最初に文字列に十分なメモリが割り当てられていることを確認する必要があります。したがって、

std::string a = "12";
a[0] = '3'; //a is now "32"
a.resize(3); //a is still "32"
a[2] = '4'; //a is now "324"

4番目に、おそらくあなたが望むのは次のとおりです。

#include <string>
#include <iostream>
int main()
{    
    std::string a = "12";    
    std::cout << a;
}
于 2012-12-12T02:38:06.717 に答える
2

を使用operator[]して文字列に文字を追加することはサポートされていません。その理由はいくつかありますが、その一つとして次のことが挙げられます。

string a;
a[1] = 12;

どうあるべきa[0]ですか?

于 2012-12-12T02:34:40.107 に答える
1

std :: stringの添え字演算子の定義に従ってください:

const char& operator[] ( size_t pos ) const;
      char& operator[] ( size_t pos );

非定数の添え字が可能です。したがって、以下は正常に機能するはずです。

std::string a;
a.resize(2);

a[0] = '1';
a[1] = '2';

std::cout << a;

しかし、それを行うための回り道のようです。

于 2012-12-12T02:43:37.173 に答える
1

C++ では、文字列は配列ではなくオブジェクトです。試す:

string a = "12";
cout << a;

必要に応じて、古いスタイルの C 文字列を引き続き使用できます。

char a[3];
a[0] = '1';
a[1] = '2';
a[2] = '\0';
...

あなたがしようとしているのは、これら 2 つのモードを混在させることです。これが機能しない理由です。

編集:他の人が指摘したstd::stringように、文字列が十分な容量で初期化されている限り、オブジェクトの添え字は機能します。この場合、文字列は空であるため、すべての添え字は範囲外です。

于 2012-12-12T02:34:50.000 に答える