2017-12-27 6 views
2

私は2つの文字列変数を宣言した小さなプログラムを持っています。入力した文字列の最初の文字を大文字に変換し、最初の文字列の内容を2番目の文字列にコピーします。しかし、(m文字列の)内容を印刷しようとすると、プログラムは何も印刷しません。なぜそれが起こるのか教えていただけますか?文字列をC++の別の文字列にコピーして文字を出力しますか?

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

string n, m; 

int main() 
{ 
    cin >> n; 
    char first_letter = n.at(0); 
    char f = toupper(first_letter); 
    n[0] = f; 
    for(int s = 0; s < n.length(); s++) { 
     m[s] = n.at(s); 
    } 
    for(int p = 0; p < m.length(); p++) { 
     cout << m[p] << endl; 
    } 
} 
+0

「はM」文字列の長さは、文字列「N」 – Amadeusz

+0

の長さにリサイズしたことがないので、0でありますあなたは本当に 'm 'に' at() '関数を使っていたはずです。あなたはすぐにエラーを見たでしょう。 'm.at(s)= n.at(s);' – PaulMcKenzie

+1

'm'に' m'をコピーするには、 'm = n;' –

答えて

3

なぜ複雑なのですか? 私はあなたがstd::stringを使用していると仮定します。インデックスが範囲外であるかどうか

#include <iostream> 
#include <string> 

std::string n,m; 
int main(){ 
    std::cin>>n; 
    n[0] = std::toupper(n.at(0)); 
    m = n; 
    std::cout << m << std::endl; 
} 

at()関数は、ランタイムチェックを行います。 operator[]はありません。

+0

Psstを実行するだけで 'std ::' 'cin'(あなたは 'cout'のためにそれを入れました)。残念ながら、私は答えをまだ編集できないので、あなたのために追加することはできません。 –

+0

@TheAspiringHackerありがとう;) – DNK

0

何も表示されない理由は、m文字列の長さがゼロであることです。最初のループでは、基本的には割り当てられていないメモリに書き込んで、mの最後に新しい値を追加しません。

0

文字列 "M" はSTDのデフォルトコンストラクタを使用して構築されている::文字列

http://en.cppreference.com/w/cpp/string/basic_string/basic_string

デフォルトのコンストラクタ。空の文字列を作成します(サイズはゼロで、容量は指定されていません)。

第二のループは、あなたのプログラムで処理されていません(理由はm.length()= 0)

関連する問題