如何使用toupper()函数来计算小写和大写用户输入?

时间:2016-11-10 05:50:38

标签: c arrays toupper

我有一个大小为25的数组,用于存储数组中的大写字母。它为我的用户输入测试存储了' A' B' C' C'和' D'我的程序计算数组中这些字母的数量并将其打印出来。例如,如果输入AABBCCDD,则表示存在2个A,2个B,2个C和2个D&#39。现在,我试图让它接受小写字母并计算它们,只要它们与大写字母相同即可。例如,如果我输入aA,Bb,cC和dD,它仍会打印出每个中有两个。我的代码如下:

int main(void)
{
    char array[25];

    printf("Enter array: \n");
    scanf("%[^\n]", array);
    printf(Array is: ", array);

    count(array, 'A');
    return 0;
 }
 void count(char* array, char p)
 {    
 int i, count = 0;
 for (i = 0; array[i] !='\0'; i++)
   if(array[i] == p)
     count++;
 printf("Number of %c's: %d\n, p, count);
 }

我希望代码能够同时计算' a'和' A'。是使用toupper()的方法吗?

3 个答案:

答案 0 :(得分:1)

您只需要用

替换if(array[i] == p)条件块

if(toupper(array[i]) == p)

如果您不确定p的情况(p可以是小写或大写的任何一种),请将其替换为

if(toupper(array[i]) == toupper(p))

答案 1 :(得分:0)

void count(char* array, char u) //pass only uppercase
 {    
    int i, count = 0;
    char l = tolower(u);      //get the lower
    for (i = 0; array[i] !='\0'; i++) {
        if(array[i] == u || array[i] == l)
        count++;
    }
    printf("Number of %c's: %d\n, p, count);
 }

BUT!对于26个字母的字母,你将超过字符串26次。想象一下,这个字符串长度可以超过100个字符 尝试制作一个只能超过字符串一次的解决方案。

答案 2 :(得分:0)

只需将if in for循环替换为以下代码段即可解决您的问题。

if(toupper(array [i])== p)

在这种情况下,每次comaprison将使用大写字符,并且当您传递char作为参数时,请确保以大写形式传递

我希望它有所帮助。