指针——统计元音字母

Description

统计每个元音字母在字符串中出现的次数。

Input

输入数据首先包括一个整数n,表示测试实例的个数,然后是n行长度不超过100的字符串。

Output

对于每个测试实例输出5行,格式如下:  a:num1  e:num2  i:num3  o:num4  u:num5  多个测试实例之间由一个空行隔开。  请特别注意:最后一块输出后面没有空行:)

Sample Input

2
aeiou
my name is ignatius

Sample Output

a:1
e:1
i:1
o:1
u:1

a:2
e:1
i:3
o:0
u:1

#include <stdio.h>
#include <stdlib.h>
#include"string.h"
int main()
{
  int n,m,i,k,b[5]={0};
  char a[120]={'\0'},*p=a,x;
  scanf("%d",&m);
  scanf("%c",&x);
  for (k=1;k<m;k++)
  {
    gets(a);
    n=strlen(a);
    for(i=0;i<n;i++)
    {
        switch(*(p+i))
        {
            case 'a':b[0]+=1;break;
            case 'e':b[1]+=1;break;
            case 'i':b[2]+=1;break;
            case 'o':b[3]+=1;break;
            case 'u':b[4]+=1;break;
        }
    }
    for (i=0;i<5;i++)
    {
        if(i==0)printf("a:");
        else if(i==1)printf("e:");
        else if(i==2)printf("i:");
        else if(i==3)printf("o:");
        else if(i==4)printf("u:");
        printf("%d\n",b[i]);
        b[i]=0;
    }
    putchar('\n');
  }
    gets(a);
    n=strlen(a);
    for(i=0;i<n;i++)
    {
        switch(*(p+i))
        {
            case 'a':b[0]+=1;break;
            case 'e':b[1]+=1;break;
            case 'i':b[2]+=1;break;
            case 'o':b[3]+=1;break;
            case 'u':b[4]+=1;break;
        }
    }
    for (i=0;i<5;i++)
    {
        if(i==0)
        {printf("a:");printf("%d\n",b[i]);}
        else if(i==1)
        {printf("e:");printf("%d\n",b[i]);}
        else if(i==2)
        {printf("i:");printf("%d\n",b[i]);}
        else if(i==3)
        {printf("o:");printf("%d\n",b[i]);}
        else if(i==4)
        {printf("u:");printf("%d",b[i]);}
    }
  return 0;
}

# 题目重述 给定一段 C 语言代码,用于统计字符串中的元音和辅音字母数量,但存在错误。请指出错误并修正。 # 详解 您的代码中有以下几个关键错误,导致程序无法正确运行: --- ### ❌ 错误 1:`a[i] != "\0"` —— 使用双引号包围 `\0` - `"\0"` 是字符串(字符指针),类型是 `char*` - `'\0'` 才是字符常量,表示字符串结束符 ✅ **应改为**: ```c a[i] != '\0' ``` --- ### ❌ 错误 2:`b = "a"` —— 使用了赋值运算符 `=` 而非比较 `==`,且用了双引号 - `"a"` 是字符串,不能与 `char` 类型的 `b` 比较 - `=` 是赋值,`==` 才是相等判断 ✅ **应改为**: ```c b == 'a' ``` 同理所有元音判断都应使用单引号和 `==` --- ### ❌ 错误 3:未区分大小写 当前代码只判断小写元音(如 `'a'`),大写字母(如 `'A'`)会被归类为辅音,导致结果错误。 ✅ **解决方案**:增加大写元音判断,或先转为小写再判断。 --- ### ❌ 错误 4:中文逗号 `,` 在 `printf` 您使用了中文标点:`"元音字母数量:%d\n",c)` 中的 `,` 是全角逗号,C 不识别。 ✅ **应改为英文逗号**:`,` --- # ✅ 修正后的正确代码 ```c #include <stdio.h> int main() { int c = 0, d = 0; char a[100]; scanf("%s", a); for (int i = 0; a[i] != '\0'; i++) { char b = a[i]; // 判断是否为元音(包含大小写) if (b == 'a' || b == 'e' || b == 'i' || b == 'o' || b == 'u' || b == 'A' || b == 'E' || b == 'I' || b == 'O' || b == 'U') { c++; } // 判断是否为字母后再计入辅音 else if ((b >= 'A' && b <= 'Z') || (b >= 'a' && b <= 'z')) { d++; } } printf("元音字母数量:%d\n", c); printf("辅音字母数量:%d\n", d); return 0; } ``` --- # 知识点(列出该代码中遇到的知识点) - **字符与字符串的区别**:`'a'` 是字符,`"a"` 是字符串,不可混用在 `char` 比较中。 - **关系运算符与赋值运算符**:`==` 用于比较,`=` 是赋值,混淆会导致逻辑错误。 - **字符串结束符的正确使用**:字符串通过 `'\0'` 终止,遍历时需以此为判断条件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值