else if 使用注意

写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。

例如:输入:ABCDE

                     A

输出:1

错误代码如下:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string str;
    int count=0;
    char last;
    getline(cin,str);
    scanf("%c",&last);
    for(int i=0;i<str.size();i++)
    {
        if((last>='0'&&last<='9')||(last==' '))
            if(last==str[i])
                count++;
        else if((last>='a')&&(last<='z'))
            if(last==str[i]||last==str[i]+('a'-'A'))
                count++;
        else if((last>='A')&&(last<='Z'))
            if(last==str[i]||last==str[i]-('a'-'A'))
                count++;
    }
    cout<<count<<endl;
    return 0;
}

正确代码如下:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string str;
    int count=0;
    char last;
    getline(cin,str);
    scanf("%c",&last);
    for(int i=0;i<str.size();i++)
    {
        if((last>='0'&&last<='9')||(last==' '))
            if(last==str[i])
                count++;
        if((last>='a')&&(last<='z'))
            if(last==str[i]||last==str[i]+('a'-'A'))
                count++;
        if((last>='A')&&(last<='Z'))
            if(last==str[i]||last==str[i]-('a'-'A'))
                count++;
    }
    cout<<count<<endl;
    return 0;
}

可见,对比正确代码和错误代码,不同之处只有for循环内部的分支选择,为什么此处else if用法是错误的呢?

经过调试,发现错误代码中满足第一个if的可以进入,满足后边两个else if的均无法进入执行,望高手解答!!!

posted @ 2018-07-11 22:40  强威  阅读(1510)  评论(1编辑  收藏  举报