1

我有一个大小为 25 的数组,它将大写字母存储在一个数组中。对于我的用户输入测试,它存储“A”、“B”、“C”和“D”。我的程序计算数组中这些字母的数量并将其打印出来。例如,如果输入了 AABBCCDD,则表示有 2 个 A、2 个 B、2 个 C 和 2 个 D。现在,我试图让它也接受小写字母并计算它们,只要它们与大写相同。例如,如果我输入 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() 方法?

4

3 回答 3

1

您只需要将if(array[i] == p)条件块替换为

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

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

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

于 2016-11-10T06:28:12.140 回答
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);
 }

但!对于字母表中的 26 个字母,您将遍历字符串 26 次。想象一下,字符串将有 100 多个字符长。
尝试制定一个只遍历字符串一次的解决方案。

于 2016-11-10T05:56:39.940 回答
0

只需将 if in for 循环替换为以下代码段,它就会解决您的问题。

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

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

我希望它有所帮助。

于 2016-11-10T06:11:47.070 回答