HJ2 计算某字符出现次数

描述

写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)

数据范围: 1 \le n \le 1000 \1n1000 

输入描述:

第一行输入一个由字母和数字以及空格组成的字符串,第二行输入一个字符。

输出描述:

输出输入字符串中含有该字符的个数。(不区分大小写字母)

示例1

输入:
ABCabc
A
复制
输出:
2
复制

#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
    char buffer[1000] = {0};
    char ch = 0;
    int i = 0;
    int result = 0;
    char check1 = 0;
    
    //fgets(buffer, sizeof(buffer), stdin);
    //ch = getchar();
    
    ////scanf 会读取并忽略在 stdin 中下一个非空白字符之前的所有空白字符(空格、换行和 tab)
//     scanf("%[^\n]",&buffer);
//     scanf(" %c",&ch);    //忽略前面的\n

     scanf("%[^\n]\n",&buffer); // "\n"读取\n不记录
     scanf("%c",&ch);
    
    /*
    //先读一行字符串,
    //再将格式化字符串中的 '\t' (空白字符)与缓冲区中0个或多个空白字符匹配并清除(规则1),
    //最后读取一个整数
    */
   // scanf("%[^\n]\t%c",&buffer,&ch); 
    
    /*
    对于 stdin 中的字符的读取,scanf 、 getchar 等函数会读取缓冲区中的第一个字符,包括空白字符和非空白字符。
    可能存在首先通过 scanf 读取了数据,如一个带换行的数字,之后再用 "%c" 读取字符时,字符读取的是换行符 '\n' 的情况。
    为了消除该换行符对正常逻辑的影响,可以在格式化字符串前面加入一个空格作为空白字符,如" %c",
    此时对于字符的读取会首先跳过上一次输入留下的换行符(前面的规则1),从而保证读取数据的正确性
    */
    //scanf("%[^\n] %c",&buffer,&ch); 
    
#if 0 
    if(ch >='a' && ch<='z')
        check1 = ch- ('a' - 'A');
    else if(ch >='A' && ch<='Z')
        check1 = ch+ ('a' - 'A');
    else
        check1 = ch;
    for(i=0;i<strlen(buffer);i++)
    {
        if(buffer[i] == ch || buffer[i] == check1)
            result++;
    }
#endif
#if 0 
    for(i=0;i<strlen(buffer);i++)
    {
        if(tolower(buffer[i]) == tolower(ch))
            result++;
    }
#endif
    
    while(buffer[i]!='\0')
    {
        if(tolower(buffer[i]) == tolower(ch))
            result++;
        i++;
    }
    
    printf("%d", result);
    
}



额外的函数:

isalpha() - <ctype.h>

tolower() <ctype.h>