将字符串拆分为标记并计算元音的C程序

时间:2018-03-18 08:55:24

标签: c string algorithm count strtok

我正在尝试执行一个C程序,将字符串拆分为标记并计算每个单词中的元音数量;如果有超过2个元音,请显示单词。 这就是我试图做的事情。我认为strtok是获取单词的最简单方法,但我找不到元音并打印出单词。该程序不会打印任何内容。

to_update = models.Person.objects.select_for_update().get(pk=instance.pk)

1 个答案:

答案 0 :(得分:0)

是的,因为当你致电r时,printf已经指向了nul-termination char(因为你的元音搜索循环)

您必须存储指针才能打印单词

const char *w = r;
while(*r!='\0')
{
    if (*r == 'a' || *r == 'A' || *r == 'e' || *r == 'E' || 
        *r == 'i' || *r == 'I' || *r =='o' || *r=='O' || 
        *r == 'u' || *r == 'U')
    {
        contor++;
    }

    r++;
}

if (contor>=2)
    printf("%s \n",w);

请注意,if的效率非常低。转换为小写和/或使用switch / case语句会降低复杂性。

while(*r!='\0'){
    switch (tolower(*r))
    {
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
           contor++;
    }
     r++;
}

哦,不要使用gets 。它已从标准中删除,因为它不安全。您可以使用scanf限制:

 scanf("%99s",s);