2017-07-27 53 views
0

我學習C,所以我做不同的C編程中的元音和重複最多的元音的字符串輸入和打印數量的挑戰,其中之一是這個節目。 WAP接受來自用戶的字符串輸入並打印編號。元音和字符串中最重複的元音。C程序接受字符串

我能夠計算和打印元音的數量,但我無法弄清楚如何計算字符串中最重複的元音,儘管我可以直接在輸出屏幕上打印出最重複的元音只需在內部循環內輸入vowels[i]的打印語句即可。但我想計算程序本身中最重複的元音,然後纔能有效地打印它。我嘗試了不同的東西,但沒有奏效。另外,我想保持代碼小巧高效。有沒有辦法呢?

這是我做過什麼,到目前爲止:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <ctype.h> 
#define MAX 150 

int main() 
{ 
    char Statement[MAX]; 
    char vowels[] = {'a', 'e', 'i', 'o', 'u'}; 
    int i, j; 

    puts("Enter a simple statement."); 
    fgets(Statement, 150, stdin); 
    printf("\nYou entered: %s\n", Statement); 
    for(i=0; i<=strlen(Statement); i++){ 
     //Converting uppercase input to lowercase 
     Statement[i] = tolower((unsigned char)Statement[i]); 
    } 
    //Calling the function to print no. of 
    NumberOfVowels(Statement, vowels); vowels 

    return 0; 
} 

    int NumberOfVowels(char Statement[], char vowels[]) 
    { 
     int i, j, vowelsAmount = 0, count = 0; 
     for(i=0; i<5; i++){        //outer loop 

       for(j=0; j<=strlen(Statement); j++){ //inner loop 
       if(vowels[i] == Statement[j]){ 
       vowelsAmount++; 
       printf("%c - ", vowels[i]); 
       } 
      } 
     } 
     printf("\nTotal number of vowels = %d", vowelsAmount); 
     return vowelsAmount; 
    } 
+0

建議:創建一個計數器陣列,每個字母一個。 c字符串中最多隻有256個。將它們全部初始化爲'0'並且增加相應的一個'counter [vowel [i]] ++'或類似的。最後你可以計算出最大值和最小值。 – Serge

+0

最容易理解的是創建第二個數組來保存每個元音的數量。另一種方法是讓你的'元音'數組2D保持每個元音的數量。 – DigitalNinja

+0

@Serge我試過在內部循環中包含一個計數器,它對'元音[0]'工作正常,但是在每個'元音[i]'結束內部循環後,我都無法提取計數器的值。因爲這樣它會爲'元音[0]'輸出正確的值,但是它會在'i> 0'後繼續添加。 –

回答

0

您可以嘗試以下任何辦法......

  • keyvalue爲會員創建一個結構MAP。有輔助方法,使您可以填充MAP結構與key作爲vowel和值沒有。 occurrences
  • 創建元音的2D陣列,其中行表示vowels和列中沒有。 occurrences
  • 最簡單的理解會被創建尺寸256(ascii)的陣列,並且在每一次出現繼續增量在array[ascii(vowel)]值1。

下面是執行的一個(我剛剛更新了你的代碼,以便其粗,請使它看起來不錯,除去多餘的打印工作)

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <ctype.h> 
#define MAX 150 

    int NumberOfVowels(char Statement[], char vowels[], int counts[]) 
    { 
     int i, j = 0; 

     for(j=0; j<strlen(Statement); j++) { 
      if (Statement[j] == '\0' || Statement[j] == '\n') { 
       continue; 
      } 
      for(i=0; i<5; i++) { 
       if(vowels[i] == Statement[j]) { 
        int ascii = (int) vowels[i]; 
        counts[ascii] = counts[ascii] + 1; 
       } 
      } 
     } 

     for(i=0; i<5; i++) { 
      int ascii = (int) vowels[i]; 
      printf("%c - %d ", vowels[i], counts[ascii]); 
     } 
     printf("\n"); 
     return 0; 
    } 

int main() 
{ 
    char Statement[MAX]; 
    char vowels[] = {'a', 'e', 'i', 'o', 'u'}; 
    int counts[256] = {0}; 
    int i, j; 

    puts("Enter a simple statement."); 
    fgets(Statement, 150, stdin); 
    printf("\nYou entered: %s\n", Statement); 
    for(i=0; i<=strlen(Statement); i++){ 
     //Converting uppercase input to lowercase 
     Statement[i] = tolower((unsigned char)Statement[i]); 
     printf("%c ", Statement[i]); 
    } 
    //Calling the function to print no. of 
    NumberOfVowels(Statement, vowels, counts); 
    return 0; 
} 

樣品試驗

You entered: Hello How are you, I am fine!                               

h e l l o h o w a r e y o u , i a m f i n e !  

    a - 2 e - 3 i - 2 o - 3 u - 1 
+0

我試過在內部循環中包含一個計數器,它對'元音[0]'工作正常,但是在每個'元音[i]'結束內部循環後我都無法提取計數器的值。因爲這樣它會爲'元音[0]'輸出正確的值,但是它會在'i> 0'後繼續添加。 –

+0

如果解決方案解決了您的問題,請接受答案並投票! – JRG