【问题标题】:Detect vowels in a string检测字符串中的元音
【发布时间】:2013-02-11 10:43:55
【问题描述】:

我正在尝试编写一个函数来检测字符串中的元音和数字。遍历字符串,我试图做一个单行 if 语句来检查一个字符是否是元音。代码如下...

void checkString(char *str)
{
    char myVowels[] = "AEIOUaeiou";

    while(*str != '\0')
    {
        if(isdigit(*str))
            printf("Digit here");
        if(strchr(myVowels,*str))
            printf("vowel here");
        str++;
    }
}

数字检查工作完美。但是“(strchr(myVowels,*str))”不起作用。它说明了形式参数和实际参数 1 的不同类型。有人可以帮我吗?谢谢

【问题讨论】:

  • 你加入了string.h 吗?
  • 在将 str* 传递给函数之前尝试将其类型转换为 char
  • @Techmonk 你不需要投射任何东西,因为*str 已经是char。它应该按原样工作。
  • 只有两个注释:(1)顺便说一句,英语也不认为'y'也是元音吗? (我是捷克人,所以这里不确定。但在捷克语中它也是元音。) (2) 请注意,有些语言有更多元音(例如 ě、á、í、é 等)
  • @mity y 是“模糊的”。它是typepity 等单词中的元音,但不是boyyell 等单词中的元音。

标签: c string strchr


【解决方案1】:

很可能您没有包含正确的头文件。

这很好用:

#include <stdio.h>
#include <ctype.h>
#include <string.h>

void checkString(const char *str)
{
    char myVowels[] = "AEIOUaeiou";

    printf("checking %s... ", str);

    while(*str != '\0')
    {
        if(isdigit(*str))
            printf("Digit here ");
        if(strchr(myVowels,*str))
            printf("vowel here ");
        str++;
    }

    printf("\n");
}

int main(void)
{
  checkString("");
  checkString("bcd");
  checkString("123");
  checkString("by");
  checkString("aye");
  checkString("H2CO3");
  return 0;
}

输出(ideone):

checking ... 
checking bcd... 
checking 123... Digit here Digit here Digit here 
checking by... 
checking aye... vowel here vowel here 
checking H2CO3... Digit here vowel here Digit here 

【讨论】:

  • 请注意,通常需要将参数转换为&lt;ctype.h&gt;is...() 函数为unsigned char。见the manual page
  • @unwind 有趣的细节,谢谢。我假设我们正在处理 ASCII 字符(因为 EBCDIC 和其他字符几乎已经灭绝),所以一切都很好。
  • 猜猜这与缺少标题有关。谢谢现在完美无缺
  • @user1234897 为防止将来出现此类错误,请获取支持更新版本 C 标准(C99 或更高版本)的现代 C 编译器。如果您忘记在 C 标准编译器中包含该头文件,您将收到编译器错误。
猜你喜欢
  • 2022-01-01
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多