2016-07-08 7 views
-2

インデックスによってC++文字列インデックスに値を割り当てる方法。私はこのコードを試しましたが、これは文字列の値を変更していません。インデックスでC++文字列インデックスに値を割り当てる方法

#include <iostream.h> 
#include <string> 

void change(string & str) 
{ 
    str[0] = '1'; 
    str[1] = '2'; 
    // str = "12" ; // it works but i want to assign value to each index separately. 
} 
void main() 
{ 
    string str; 
    change(str); 
    cout << str << endl; // expected "12" 
} 
+1

_ _簡単に "C指数による++文字列インデックスに値を代入する方法": 'STR [0] = '1'; str [1] = '2'; 'ただし、前に' str [1] 'が存在することを確認する必要があります。 –

+0

"12"の代わりに何を得ますか?また、 'string'は各要素の内容だけでなくサイズも知っていなければならないことに留意してください。実際には[0]番目と[1]番目の要素が割り当てられているにもかかわらず、そのサイズはまだ0であるため、空文字列が出力されていると思われます。 – mvidelgauz

+0

'iostream.h'ではなく' #include ' 'string'、' cout'、 'endl'の前に' std :: 'を置かないので、コードはコンパイルされません。 – Falmarri

答えて

8

ただし、インデックスで文字を割り当てる前に、それらのインデックスが有効であるように文字列のサイズを変更する必要があります。 stringstreamsのためのSTL sstreamを使用して

str.resize(2); 
0

は、動的な文字列を追加し、作成するための、それははるかに簡単になります。

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

void change(stringstream *ss, char value) { 
    *ss << value; 
} 

int main() { 
    stringstream stream; 
    stream << "test"; 

    change(&stream, 't'); 

    cout << stream.str() << endl; //Outputs 'testt' 
    return 0; 
} 
+0

他のヘッダが 'std :: string'を定義しているにもかかわらず、特定のインデックス – user463035818

3

まず第一に、このコードはコンパイルさえしません。 エラー:

  1. <iostream.h>は標準ヘッダーではありません。ちょうど<header>を使用してください。
  2. using namespace std;または接頭辞coutおよびendlstd::を使用してください。
  3. mainは、voidではなく、intを返す必要があります。

次に文字列のサイズは、まだゼロであるので、str[0]str[1]を変更するには、未定義の動作です。それを修正する

は、std::string::resize (size_t)を使用して、その大きさを設定します。

str.resize (2); 
+0

の' 'が値を変更するのと同じではありません。いくつかの実装(MSVCのような)は 'std :: string'の他のヘッダ(' ostream'オーバーロードのような)に_everything_を定義しないので、プラットフォーム/コンパイラに依存しないようにインクルードすることをお勧めします。 – Rakete1111

+0

これを指摘してくれてありがとう、ありがとう;) –

+0

ありがとう、btwそれはWindowsのコンパイラ(cフリー)でコンパイルします。文法の間違いに気付かなかった。 –

関連する問題