2015-10-05 42 views
0

我遇到問題。計數句子字符

我想製作一個計算一個句子中元音數量的程序。

要做到這一點,我使用strlen來計算一個句子中的字母數量 ,但問題是,爲什麼它只計算第一個單詞。

我需要一個句子中的字符數循環程序來查找句子中每個單詞中的元音。

如何統計一個句子中的所有字符?

應該使用哪個命令?

我用C語言

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

int main() 
{ 
    int input; 

    int repeater; 
    scanf("%d",&input); 
    int counter[input]; 
    getchar(); 
    char kalimat[100000]; 
    scanf("%s",kalimat); 
    for(int i=1;i<=input;i++) 
    { 
     counter[i]=0; 
    } 
    repeater=strlen(kalimat); 
    for(int i=1;i<=input;i++) 
    { 
     for(int j=i;j<=repeater;j++) 
     { 
      if(kalimat[j]=='A'||kalimat[j]=='a'||kalimat[j]=='E'||kalimat[j]=='e'||kalimat[j]=='I'||kalimat[j]=='i'||kalimat[j]=='O'||kalimat[j]=='o'||kalimat[j]=='U'||kalimat[j]=='u') 
      { 
       counter[i]++; 
      } 
     } 

    } 
+2

你知道'switch'嗎? 'char kalimat [100000]'不是一個好主意,它仍然不安全,它足夠'char kalimat [100]; scanf(「%99 [^ \ n]」,kalimat)'。 –

+0

你也忘了'y',這有時是一個元音... –

+2

C中的數組不是從0開始索引的? – PatJ

回答

5

scanf只抓住了,直到第一個空間。您需要將模式傳遞給接受空格的scanf。嘗試用"%[^\n]"替換"%s"

+2

轉換中的反斜槓是什麼?不應該是'「[^ \ n]」'? – EOF

+0

@EOF好抓!我輸錯了。我編輯了答案來澄清這一點。謝謝! – Kagetsuki

0
  1. 如果您使用「%s」作爲引發器,scanf只會計入第一個spacer。

  2. char kalimat [100000];是醜陋的,醜陋的編碼,仍然不安全溢出。只要限制你可以輸入的字符數爲200左右。

  3. 字符串索引從0開始,所以你的i計數器也應該。

0

%s轉換指定告訴scanf讀取直到下一個空白字符;它不會讀取用空格分隔的多個單詞。

比較安全的做法是

if (!fgets(kalimat, sizeof kalimat, stdin)) 
{ 
    // error on input, handle as appropriate 
} 
else 
{ 
    // process kalimat 
} 

要知道,fgets將其後的換行符存儲到kalimat如果有空間。對於汽車陣列來說,10千字節有點大。

0

請嘗試此操作,根據需要擴展到其他字母,'Y'也許。

#include <string.h> 
int main() 
{ 
    int i = 0; 
    int counter = 0; 
    char c; 
    char kalimat[100000]; 

    printf("\n please enter text\n"); 
    fgets(kalimat, 100000, stdin); 

for (i = 0; i < strlen(kalimat); i++) 
{ 
    c = toupper(kalimat[i]); 
    if (c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U') 
    counter++; 
} 
printf("\n I counted %d vowels ", counter); 
getchar(); 
}