计算C中字符串中单个字符(元音)的数量

时间:2017-11-05 11:47:38

标签: c for-loop

我刚开始使用C编程,我必须创建一个程序来计算字符串中有多少个元音。到目前为止,我有这个:

int a; 
int len = strlen(text)-1
for(a=0;a==len;++a){
    if(text[a]=='a'){
        ++vocals;}

我对什么是错的一无所知,因为它总是打印0.我理解我的代码为:

  • 从第一个字符开始,直到\ 0之前的最后一个字符,
  • 将它们与' a'进行比较,如果它们相同,则向计数器添加一个。

我的代码出了什么问题?

4 个答案:

答案 0 :(得分:0)

检查有关for循环的语法和语义的教程或教科书。

它需要一个延续条件,即"循环,只要这是真的"。

因此,在您的代码中,您应该更改为:

for(a=0; a<len; ++a) 

答案 1 :(得分:0)

更改此

for(a=0;a==len;++a) 

for(a=0;a<=len;++a)

第一次迭代a不等于len所以它永远不会进入循环。你希望迭代这个for循环,只要a小于len,第二个语句就是这样。

答案 2 :(得分:0)

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

int main(){
    char* text = "this is a test";
    int i, vocals;
    int len = strlen(text);
    for(i=0;i<len;++i){
        if(text[i]=='a'||text[i]=='e'||text[i]=='i'||text[i]=='o'||text[i]=='u')
            ++vocals;
    }
    printf("%d\n", vocals);
}

这是一个有效的小程序。 让我们一起看看主要内容:

  • 首先我们声明一个char数组,因为你省略了那个部分我假设你的字符串是正确形成的。
  • for循环继续,直到我等于len。使用<>代替!===来增加代码强度是一种很好的编程习惯。无论如何,因为它是一个小程序,你甚至可以使用!=,这意味着&#34;执行for循环直到i等于len&#34;
  • 在if语句中,我们只是检查当前字符是否等于&#39; a&#39; &#39; e&#39; &#39;我&#39; &#39; o&#39; &#39; u&#39;。正如您现在猜测的那样||运算符意味着or

编辑:

有很多更有效(和复杂)的方法来做到这一点。例如,使用Regular Expression。如果您有兴趣,可以在线获得大量优秀教程,例如this

答案 3 :(得分:0)

此代码段

int a; 
int len = strlen(text)-1
for(a=0;a==len;++a){
    if(text[a]=='a'){
        ++vocals;}

没有多大意义。

例如,字符'a'不是唯一的元音,仅当字符串只包含一个字符时,条件a == len才会被计算为true。

您可以编写一个单独的函数来计算字符串中的元音。

这是一个示范程序。

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

size_t count_vowels( const char *s )
{
    const char *vowels = "aeiou";

    size_t count = 0;

    for ( ; *s; ++s )
    {
        if ( strchr( vowels, tolower( ( unsigned char )*s ) ) )
        {
            ++count;
        }
    }

    return count;
}

int main(void) 
{
    char s[] = "Hello Pelput";

    printf( "There are %zu vowels in the string\n\"%s\"\n",
        count_vowels( s ), s );

    return 0;
}

程序输出

There are 4 vowels in the string
"Hello Pelput"