我有可能忘了什么吗?

时间:2016-12-13 04:39:22

标签: c++

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');

一段代码,从用户获取一个字符串,如果有任何大写,则输出一个单独的“是”,否则不输出任何大写字母。这是我的测试,我没有完全满足指令中的要求。

它可以工作,但是当我输入“HHi”时它会输出“YesYes”,当它只是“是”时。

我怎样才能确保它在找到任何数量的大写时只打印一个“是”?

2 个答案:

答案 0 :(得分:1)

这是@ Jonathan的答案的替代答案。只需在不使用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";

答案 1 :(得分:0)

您应该在if语句中输出“Yes”并立即中断while循环,例如:

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

}

(当输入为空字符串时,您的代码似乎会中断。)