2015-10-05 3 views
0

У меня проблема.Count Sentence Character

Я хотел бы сделать программу, которая подсчитывает количество гласных в одном предложении.

И для этого я использую 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

Знаете ли вы, что «выключатель»? Кроме того, этот 'char kalimat [100000]' не является хорошей идеей, и это все еще небезопасно, этого было бы достаточно, чтобы char charmat [100]; scanf ("% 99 [^ \ n]", kalimat) '. –

+0

вы также забыли 'y', что иногда является гласным ... –

+2

Не массивы, индексированные из 0 в C? – PatJ

ответ

5

scanf не только захватывая вплоть до первого места. Вам нужно передать шаблон scanf, который принимает пробелы. Попробуйте заменить "%s" на "%[^\n]".

+2

Что такое обратная косая черта в конверсии? Не должно быть '' [^ \ n] "'? – EOF

+0

@EOF Хорошая добыча! Я ошибся. Я отредактировал ответ, чтобы это понять. Благодаря! – Kagetsuki

0
  1. scanf отсчитывает только первую проставку, если вы используете «% s» в качестве инициатора.

  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(); 
}