2016-12-13 6 views
0
string str; 
int i = 0, counter = 0; 
cin >> str; 
do 
{ 
    if(str[i] >= 'A' && str[i] <= 'Z')counter++; 
    cout << "Yes"; 
    i++; 

}while(str[i] != '\0'); 

ユーザから文字列を受け取り、大文字の場合は「はい」を1つ出力するコード。それ以外の場合は何も出力しません。これは私のテストの結果であり、私は指示に必要なものを完全には満たしていませんでした。私は何かを忘れた可能性はありますか?

「HHi」のように入力すると「はい」と表示されます。

どのような大文字を見つけたら「はい」を1つだけ印刷することができますか?

+1

カウンタを増分する代わりに、大文字を入力するとYesを出力してループを中断してください。とにかくカウンターをチェックすることはありません。 – samgak

+0

また、大文字はすべての文字セットで連続していません( ''A' 'と'' Z ''の間の文字ではありません)。あなたは、標準ヘッダ ''から標準関数 'isupper()'を使う方が良いです。 – Peter

+0

この質問の件名は、プログラミングの文脈で全く意味がありません –

答えて

0

あなたが「はい」あなたのif文とすぐに内部のwhileループを出力破る必要があり、例えば:

string str; 
int i = 0; 
cin >> str; 
while(str[i] != '\0') 
{ 
    if(str[i] >= 'A' && str[i] <= 'Z'){ 
     cout << "Yes"; 
     break; 
    } 
    i++; 

} 

(。入力が空の文字列であるとき、あなたのコードが壊れるようです)

+0

ブレークを使わないでも可能ですか?ありがとう! –

+0

はい、あなたのカウンターをifステートメントの中に入れ、ループの後に 'counter> 0'があるかどうかをチェックします。 –

+0

@AudreyYee、 'return'、' throw' ... –

1

これはジョナサンの答えに対する別の答えです。 break文を使用せずに同じ答えを得ることができます。

string str; 
int i = 0, counter = 0; 
cin >> str; 
while(str[i] != '\0') 
{ 
    if(str[i] >= 'A' && str[i] <= 'Z') 
     counter++; 
    i++; 
} 
if(counter > 0) 
    cout << "Yes"; 
関連する問題