我正在尝试执行一个C程序,将字符串拆分为标记并计算每个单词中的元音数量;如果有超过2个元音,请显示单词。 这就是我试图做的事情。我认为strtok是获取单词的最简单方法,但我找不到元音并打印出单词。该程序不会打印任何内容。
to_update = models.Person.objects.select_for_update().get(pk=instance.pk)
答案 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);