2017-08-26 9 views
1

私は、単一文字の文字列に、このように割り当てることにより、大文字の文字列に文字列を変換しようとしています: -C++で文字列オブジェクトにcharを割り当てる方法は?

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

int main() 
{ 
    string a; 
    getline(cin,a); 
    string b; 
    b.reserve(a.size()+1); 
    for(int i=(a.size()),i1=0;1;i1++) 
    { 
    if(b[i1]!='\0') 
     b[i1]=(char)toupper(a[i1]); 
    else 
    { 
     a[i1]='\0'; 
     break; 
    } 
    } 
    cout << b <<endl; 
} 

すべての./a.outでa.outを実行すると、のみendlがプリントここ

を取得サンプル実行です。 -

$ ./a.out 
play clash royale 

$ 

私のプログラムで何が間違っていますか?私はどのように文字列に単一の文字を割り当てることができますか?

+0

テスト 'A'と 'B' –

+0

@GillesGouaillardetを割り当てることを意味???:

作業バージョンが(これを書くためのより良い方法はただOPの提案とほとんど一致している、がある)怒鳴るです –

+0

文字列( 'cout << b << endl;')を逆にして表示しようとします。それから、ループと条件がチェックされていれば、 – Blasanka

答えて

3

プログラムにはいくつかの問題があります。主なものはおそらくstring reservestring resizeの間の違いです。あなたのプログラムで何をしたいのですか?a.size()の長さの文字列がすでにあるので、b.resize(a.size())を使用してください。

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

int main() 
{ 
    string a; 
    getline(cin,a); 
    string b; 
    b.resize(a.size()); 
    for(int i1=0; i1 < a.size();i1++) 
    { 
     if(a[i1]!='\0') 
      b[i1]=(char)toupper(a[i1]); 
     else 
     { 
      b[i1]='\0'; 
      break; 
     } 
    } 
    cout << b <<endl; 
} 
+0

C++ 11を使用している場合は、 'for(char chA:a){...}'を実行し、 'a [i1] '' chA'のループの中で – TuanDT

+1

@ Tuan333私は '' std :: transform(a.begin()、a.end()、a.begin()、:: toupper); 'をインパース変換または' std :: transform(a.begin()、a.end()、b.begin()、:: toupper); 'bに入れる – Amadeus

+0

真。私はOPのソースコードを変更していると思っていましたので、いくつかのコメントを入れて、より現代的にすることを考えました:P – TuanDT

関連する問題