为什么输入一行字符串,统计不出字符串中的元音字母?

C语言,为什么我输入一行字符串,统计不出字符串中的元音字母?求指点指点

img

img

应该使用 switch(a[i])
switch(a!='\n') 只有两种情况,1和0

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7526130
  • 这篇博客你也可以参考下:【C】写一个函数,输入一行字符,将此字符串中最长的单词输出
  • 除此之外, 这篇博客: 两栈共享空间 C语言中的   顺序栈存储还是很方便的,不过它有一个致命的缺点,就是必须事先确定数组存储空间大小,万一不够用了,就需要编程手段来扩展数组的容量。但如果我们有两个相同类型的栈,我们为他们各自开辟了数组空间,这时,我们完全可以用一个数组存储两个栈。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

     

  • 您还可以看一下 王健伟老师的C语言入门篇课程中的 结构体数组、结构体指针小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    答案:

    针对问题内容,需要先了解一下元音字母的定义,英语中的元音字母包括a,e,i,o,u这五个字母。因此,统计输入字符串中的元音字母可以按照以下步骤进行解决:

    1. 定义一个计数器变量count,用于记录元音字母的数量,初始值为0。

    2. 读入用户输入的字符串。

    3. 遍历字符串中的每一个字符,判断该字符是否是元音字母,如果是,计数器count加1。

    4. 输出计数器count的值,即为字符串中元音字母的数量。

    具体的C语言程序如下所示:

    // 统计输入字符串中的元音字母数量

    include

    include // 需要ctype.h头文件

    int main() { char s[100]; // 定义字符数组,最大长度为100 int i, count = 0; // 定义计数器变量count,初始值为0

    printf("请输入一个字符串(最大长度为100):");
    fgets(s, 100, stdin); // 读入用户输入的字符串使用fgets函数可以一次读入一整行
    
    for (i = 0; s[i] != '\0'; i++) // 遍历字符串中的每一个字符
    {
        if (tolower(s[i]) == 'a' || tolower(s[i]) == 'e' || tolower(s[i]) == 'i' || tolower(s[i]) == 'o' || tolower(s[i]) == 'u') // 判断字符是否为元音字母
        {
            count++; // 计数器加1
        }
    }
    
    printf("字符串中元音字母的数量为:%d\n", count); // 输出计数器count的值
    
    return 0;
    

    }

    针对段落0和段落1,这两个部分与问题无关,可以忽略。

    针对段落2,可以将函数定义为宏定义,但这种方式并不是很常见,一般情况下还是使用函数。宏定义有3个比较大的特点:没有类型检查,没有作用域检查,没有副作用,具体如下:

    1. 没有类型检查:编译器不会进行类型检查,也就是说,在代码中使用宏定义的地方,无论实参是什么类型,宏展开后的代码都是相同的。这也是宏定义的一个危险之处,需要慎重使用。

    2. 没有作用域检查:定义宏的地方就是宏的作用域,宏可以定义在任何地方,也可以在任何地方使用。因此,宏定义会影响全局,可能会产生意料之外的后果。

    3. 没有副作用:宏定义不会对实参进行任何计算,它们只是将实参替换为一些文本。因此,在宏定义中不能包含任何副作用,比如自增、自减、赋值等操作。

    因此,一般情况下,尽量使用函数,而不是宏定义。

    至于如何将函数定义为宏定义,可以使用#define预处理器指令,例如:

    define max(a,b) ((a) > (b) ? (a) : (b))

    这个宏定义表示返回a和b中的最大值,使用时可以直接调用max函数,例如:

    int a = 5, b = 7; int c = max(a, b);

    宏定义的展开形式为:((a) > (b) ? (a) : (b)),它们会被替换为c = ((5) > (7) ? (5) : (7)) = 7。

    然而,这种方式会存在上述的宏定义的3个问题,因此,建议使用函数来进行计算。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^