Форум программистов, компьютерный форум, киберфорум
Наши страницы

C для начинающих

Войти
Регистрация
Восстановить пароль
 
bladzher
2 / 2 / 0
Регистрация: 15.10.2012
Сообщений: 76
#1

Подсчет слов, не содержащих гласных - C (СИ)

07.12.2012, 16:51. Просмотров 537. Ответов 6
Метки нет (Все метки)

Здравствуйте!
Помогите пожалуйста исправить код,я написал и сам запутался
вот задание :
В символьной строке сосчитать число слов, не содержащих гласных
букв.


Код:
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
#include <windows.h>
 
#define in 1    /* внутри слова */
#define out 0   /* вне слова */
#define in1 1   /* внутри слова */
#define out1 0  /* вне слова */
#define in2 1   /* внутри слова */
#define out2 0  /* вне слова */
 
main()
{
    int i,k,j,state,state1,bukva,counter;
    char str[100];
    char tmp[100];
        state = out;
                state1 = out1;
                        bukva = out2;
    i = k = counter =0;
        SetConsoleCP(1251); SetConsoleOutputCP(1251);//Для вывода русских букв
 
 
          puts("Введите строку:");
  gets(str);
 
  printf("\n%s\n",str);
 
 
        for (i=0;i<strlen(str);i++)
        {
            if (state1==out1)
            {
        if (str[i]!=' '&& str[i]!=',')
        {
        tmp[k++]=str[i];
        state1=in1;
        }
        }
            else 
                if (str[i]!=' '&&str[i]!=',')
                    tmp[k++]=str[i];
                else
                    for (j=0;j<k&&bukva==out2;j++)
                        if (tmp[j]=='i')
                            bukva=in2;
            if (bukva==out2)
                counter++;
            k=0;
            state=out;
        }
 
tmp[k++]='\0';
 
printf("%s",tmp);
printf("%d",counter);
 
 
  printf("\n\n... Press any key ...");
    getch();
    return 0;
}


Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2012, 16:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подсчет слов, не содержащих гласных (C (СИ)):

Не могу разобраться:"В символьной строке сосчитать число слов, не содержащих гласных букв." - C (СИ)
Здравствуйте! Подскажите пожалуйста как сделать подсчет слов не содержащих гласных букв? Еслиб было &quot;содержащих гласных букв&quot; то сделал...

Количество чисел в строке, удаление слов, начинающихся с гласных. - C (СИ)
Здравствуйте, задача такова: написать программу, которая считает кол-во чисел (именно чисел, а не цифр), в строке, которая введена с...

Подсчитать количество слов, содержащих цифры - C (СИ)
Помогите сделать программу: Задание: Подсчитать количество слов, содержащих цифры. Буду очень благодарен.

Найти количество слов, содержащих в себе заданную букву - C (СИ)
Здравствуйте! Прошу помочь мне с такой задачей: С клавы ввести предложение и букву. Найти количество слов с заданной буквой. Заранее...

Удаление в строке слов, содержащих букву указанную пользователем - C (СИ)
Написать программу, обрабатывающую введенный пользователем текст, состоящий из слов, записанных через пробелы. Длина текста не больше 255...

Определить количество слов в строке содержащих ровно два символа «С» - C (СИ)
Дана строка – предложение. Определить количество слов в строке содержащих ровно два символа «С». Символ «С» указывает пользователь....

6
easybudda
Модератор
Эксперт CЭксперт С++
9915 / 5838 / 975
Регистрация: 25.07.2009
Сообщений: 11,010
07.12.2012, 17:05 #2
bladzher, можно проще сделать:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <string.h>
 
#define VOWELS "AaEeIiOoUu"
#define DELIM " \t\n"
 
int main(void) {
    char buf[BUFSIZ], * ptr;
    size_t cnt;
    
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) {
        for ( cnt = 0, ptr = strtok(buf, DELIM); ptr; ptr = strtok(NULL, DELIM) )
            if ( ! strpbrk(ptr, VOWELS) )
                ++cnt;
        printf("%lu words without vowel letters.\n", cnt);
    }
    
    return 0;
}
0
bladzher
2 / 2 / 0
Регистрация: 15.10.2012
Сообщений: 76
07.12.2012, 17:28  [ТС] #3
Цитата Сообщение от easybudda Посмотреть сообщение
bladzher, можно проще сделать:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <string.h>
 
#define VOWELS "AaEeIiOoUu"
#define DELIM " \t\n"
 
int main(void) {
    char buf[BUFSIZ], * ptr;
    size_t cnt;
    
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) {
        for ( cnt = 0, ptr = strtok(buf, DELIM); ptr; ptr = strtok(NULL, DELIM) )
            if ( ! strpbrk(ptr, VOWELS) )
                ++cnt;
        printf("%lu words without vowel letters.\n", cnt);
    }
    
    return 0;
}
Спасибо большое!
А можете пожалуйста поподробнее расписать действия? А то я Си недавно изучаю и не все действия и функции понятны
0
easybudda
Модератор
Эксперт CЭксперт С++
9915 / 5838 / 975
Регистрация: 25.07.2009
Сообщений: 11,010
07.12.2012, 18:02 #4
Цитата Сообщение от bladzher Посмотреть сообщение
А можете пожалуйста поподробнее расписать действия?
Прочитайте руководство к стандартным функциям fgets(), strtok() и strpbrk() - всё станет понятнее. В двух словах читается строка, делится на токены (отдельные слова по пробельным символам), если в слове не находятся гласные буквы, увеличивается значение счётчика...
0
bladzher
2 / 2 / 0
Регистрация: 15.10.2012
Сообщений: 76
08.12.2012, 17:14  [ТС] #5
Цитата Сообщение от easybudda Посмотреть сообщение
Прочитайте руководство к стандартным функциям fgets(), strtok() и strpbrk() - всё станет понятнее. В двух словах читается строка, делится на токены (отдельные слова по пробельным символам), если в слове не находятся гласные буквы, увеличивается значение счётчика...
Спасибо)
А не подскажите для чего ptr; в этой строке? (for ( cnt = 0, ptr = strtok(buf, DELIM); ptr; ptr = strtok(NULL, DELIM) ))
0
bladzher
2 / 2 / 0
Регистрация: 15.10.2012
Сообщений: 76
10.12.2012, 18:38  [ТС] #6
easybudda, Спасибо)
А не подскажите для чего ptr; в этой строке? (for ( cnt = 0, ptr = strtok(buf, DELIM); ptr; ptr = strtok(NULL, DELIM) ))
0
easybudda
Модератор
Эксперт CЭксперт С++
9915 / 5838 / 975
Регистрация: 25.07.2009
Сообщений: 11,010
10.12.2012, 18:55 #7
Цитата Сообщение от bladzher Посмотреть сообщение
А не подскажите для чего ptr; в этой строке?
Проверка того, что strtok не вернула NULL, то есть выдала указатель на очередное слово. Для понятности можно так переписать:
C
1
for ( cnt = 0, ptr = strtok(buf, DELIM); ptr != NULL; ptr = strtok(NULL, DELIM) )
Перечитайте описание оператора for в любом учебнике.
0
10.12.2012, 18:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2012, 18:55
Привет! Вот еще темы с ответами:

Не работает подсчет слов - C (СИ)
Вот пример из книженции. Программа должна подсчитывать слова, но она не хочет работать. Компилируется нормально, когда вводишь слова,...

Подсчет слов в строке - C (СИ)
Помогите плз. Срочно нужно. Задача. Подсчитать слова в строке. Надо на языке C. И обязательно через функцию. Спасибо заранее.

Подсчет повторяющихся слов - C (СИ)
Необходимо подсчитать повторяющиеся слова в строке. &gt; mama papa mama brat &gt; mama - 2 papa - 1 brat - 1 Делает все что...

Подсчет слов в тексте - C (Си)
#include&lt;stdio.h&gt; #include&lt;string.h&gt; int word (char *p, int len) { int i; int state = 0; int count = 0; for(i =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru