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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 5.00
Larka91
0 / 0 / 0
Регистрация: 02.10.2010
Сообщений: 27
#1

Определить количество слов в тексте, оканчивающихся на гласную букву - C++

07.02.2011, 16:21. Просмотров 2529. Ответов 19
Метки нет (Все метки)

Помогите пожалуйста с заданием, особенно пункт 2 ...

С помощью текстового редактора создать файл, содержащий текст, длина которого не превышает 1000 символов (длина строки текста не должна привышать 70 символов)

Имя файла должно иметь расширение DAT

Написать программу, которая

1) выводит текст на экран
2) определяет количество слов в тексте, оканчивающихся на гласную букву

Добавлено через 2 минуты
есть кое что уже

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
#include<stdio.h>
void main()  {
  int n, k, flag;
  char c, *glas="euioaEUIOA";
  FILE *f, *g;
  f=fopen("lab6.dat", "r");
  g=fopen("lab6.rez", "a");
    if((f==NULL)||(g==NULL))
       printf("Ошибка открытия файлов\n");
    else  {
       printf("Чтение производится из файла lab6.dat,\nа результаты выводятся в файл lab6.rez\n");
       flag=0;
       k=0;
       c=(char)fgetc(f);
 
       while (!feof(f)) {
      if (flag==1) {
        if ((c==' ')||(c=='\n')||(c=='\t')||(c=='\r')||(c=='\v')||(c=='.')
||(c==',')||(c=='!')||(c=='?')||(c==':')||(c==';')||(c=='"')
||(c==')'))
           k++;
        flag=0;
      }
      for(n=0;n<=10;n++)
        if(c==glas[n]) flag=1;
      printf("%c", c);
 
      fprintf(g,"%c", c);
      c=(char)fgetc(f);
       }
        printf("\n Вывод: Количество слов, оканчивающихся на гласную:%d\n\n\n", k);
fprintf(g,"\nВывод: Количество слов, оканчивающихся на гласную:%d\n\n\n", k);
    }
  fclose(f);
  fclose(g);
}
но не уверена
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2011, 16:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить количество слов в тексте, оканчивающихся на гласную букву (C++):

Подсчитать количество слов в тексте, которые заканчиваются на гласную букву - C++
С клавиатуры вводится текстовый рядок. Написать программу, которая подсчитывает ко-во слов в тексте, которые заканчиваются на гласную...

Определить в тексте количество слов, содержащих заданную букву только 1 раз - C++
Определить в тексте кол-во слов, содержащих заданную букву только 1 раз. Помогите плиз. #include &lt;stdio.h&gt; #include...

Работа с лентами (Подсчитать количество слов оканчивающихся на букву о) - C++
Строка содержит английский текст. Подсчитать количество слов оканчивающихся на букву о.

Определить количество слов начинающихся и оканчивающихся одной и той же буквой - C++
Дан текст. Определить количество слов начинающихся и оканчивающихся одной и той же буквой как будет код?

Определить процент слов в тексте заканчивающихся на русскую букву а - C++
Как правильно подсчитать процент слов? Выводит 0. Заранее огромное спасибо. #include &lt;iostream&gt; #include &lt;string&gt; #include...

Определить, сколько слов в тексте начинается на заданную букву - C++
Суть задачи такова: нам дана буква, нужно определить, сколько слов в тексте начинается на эту букву, затем вывести эти слова и их...

19
asics
Freelance
Эксперт С++
2852 / 1787 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
07.02.2011, 16:26 #2
Цитата Сообщение от Larka91 Посмотреть сообщение
2) определяет количество слов в тексте, оканчивающихся на гласную букву
C
1
2
3
4
5
6
7
#define DELIM " ,.:;?!"
#define GLAS_LETT "AaEeIiOoYyUu"
//...
for(char *p = strtok(str, DELIM); p; p = strtok(NULL, DELIM))
  for(int i = 0; i < strlen(GLAS_LETT); ++i)
    if(p[strlen(p) - 1] == GLAS_LETT[i])
      ++cnt_wrd;
1
Larka91
0 / 0 / 0
Регистрация: 02.10.2010
Сообщений: 27
07.02.2011, 16:28  [ТС] #3
Спасибо, а можно всю программу и нас просят её сделать на QC
0
easybudda
Модератор
Эксперт CЭксперт С++
9724 / 5675 / 972
Регистрация: 25.07.2009
Сообщений: 10,921
07.02.2011, 16:43 #4
Цитата Сообщение от Larka91 Посмотреть сообщение
QC
Что это?
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
#include <stdio.h>
#include <string.h>
 
#define DELIM " \t\n,.!?:;-%"
#define VOWELS "AaEeIiOoUuYy"
 
int main(void){
    char buf[BUFSIZ], *p;
    int cnt;
    FILE * f;
    
    printf("File name: ");
    if ( scanf("%s", buf) != 1 ){
        fprintf(stderr, "Input error!\n");
        return 1;
    }
    
    if ( ( f = fopen(buf, "r") ) == NULL ){
        fprintf(stderr, "Can't open file for input!\n");
        return 1;
    }
    
    cnt = 0;
    printf("Content:\n\n");
    while ( fgets(buf, BUFSIZ, f) ){
        printf("%s", buf);
        for ( p = strtok(buf, DELIM); p; p = strtok(NULL, DELIM) )
            if ( strchr(VOWELS, p[strlen(p) - 1]) )
                ++cnt;
    }
    if ( ferror(f) ){
        fprintf(stderr, "Error while reading file!\n");
        if ( fclose(f) )
            fprintf(stderr, "Can't close file!\n");
        return 1;
    }
    
    fclose(f);
    printf("\n\n%d words ends with vowel letter.\n", cnt);
    
    return 0;
}
1
Larka91
0 / 0 / 0
Регистрация: 02.10.2010
Сообщений: 27
07.02.2011, 16:53  [ТС] #5
Шикарно, огромное спасибо

PS. Это конечно не обязательно, но вариант для русского текста можно?
0
easybudda
Модератор
Эксперт CЭксперт С++
9724 / 5675 / 972
Регистрация: 25.07.2009
Сообщений: 10,921
07.02.2011, 16:58 #6
Цитата Сообщение от Larka91 Посмотреть сообщение
но вариант для русского текста можно?
Их аж три, как минимум - cp866(DOS), cp1251(Windows), utf-8(UNICODE)
Вам для какого "русского текста" нужно?
0
zulkis
684 / 611 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
07.02.2011, 17:06 #7
QT мб ? Оо
0
Larka91
0 / 0 / 0
Регистрация: 02.10.2010
Сообщений: 27
15.02.2011, 01:45  [ТС] #8
Спасибо за работающую программу, но тут проблема, можно ли ее скорректировать под некоторые условия

"Использовать только библиотечные функции ввода/вывода слова,
Нельзя использовать функции библиотеки, находящиеся в файле string.h,
Нельзя использовать библиотечные функции работы со строками/словами"

Добавлено через 1 час 7 минут
Помогите пожалуйста отредактировать код
0
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
15.02.2011, 09:29 #9
Цитата Сообщение от Larka91 Посмотреть сообщение
Спасибо за работающую программу, но тут проблема, можно ли ее скорректировать под некоторые условия

"Использовать только библиотечные функции ввода/вывода слова,
Нельзя использовать функции библиотеки, находящиеся в файле string.h,
Нельзя использовать библиотечные функции работы со строками/словами"
А сразу об этом написать было нельзя? В самом первом сообщении, в формулировке задачи? Нужно уметь уважать и свое время, и чужое.
Напиши функцию, которая будет возвращать указатель на конец очередного слова. Потом проверяй, содержится ли символ, на который указывает возвращаемый указатель, в строке гласных.
0
Larka91
0 / 0 / 0
Регистрация: 02.10.2010
Сообщений: 27
15.02.2011, 09:39  [ТС] #10
Извините, не были сразу сказаны условия к заданию не заметили ..
0
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
15.02.2011, 10:02 #11
Цитата Сообщение от Nameless One Посмотреть сообщение
Напиши функцию, которая будет возвращать указатель на конец очередного слова. Потом проверяй, содержится ли символ, на который указывает возвращаемый указатель, в строке гласных.
вот это можно сделать с помощью таких функций (wordEnd, in):
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
#include <stdio.h>
#include <stdlib.h>
 
#define VOWELS "AaEeIiOoUuYy"
 
const char* wordEnd(const char* line, const char* pr);
int in(const char* set, char c);
 
int main(void)
{
    const char* str = "a\nfoo bara,baz  \tquuza;\t.xyzzy? bat!qwe\n";
    const char* p = str;
    size_t cnt = 0;
    
    puts(str);
 
    for(p = wordEnd(str, p); p != NULL; p = wordEnd(str, p + 1))
    if(in(VOWELS, *p))
        ++cnt;
 
    printf("Number of words ending with vowel letter: %u.\n", cnt);
    
    exit(0);
}
 
#define DELIMS " \t\n,.!?:;-%"
 
const char* wordEnd(const char* line, const char* pr)
{
    for( ; *pr; ++pr)
    if(in(DELIMS, *(pr + 1)))
        return pr;
 
    return NULL;
}
 
int in(const char* set, char c)
{
    while(*set)
    if(c == *set++)
        return 1;
    return 0;
}
1
Larka91
0 / 0 / 0
Регистрация: 02.10.2010
Сообщений: 27
15.02.2011, 10:08  [ТС] #12
Не работает
0
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
15.02.2011, 10:09 #13
Larka91, что именно не работает?
0
Larka91
0 / 0 / 0
Регистрация: 02.10.2010
Сообщений: 27
15.02.2011, 10:11  [ТС] #14
А как же ввод из файла .DAT ? и при компиляции выводиться на экран "a\nfoo bara,baz \tquuza;\t.xyzzy? bat!qwe" оО

в посте№4 прекрасно работающая программа, но под условия задания не подходит вот и проблема
0
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
15.02.2011, 10:17 #15
Larka91, и это уже значит "не работает"? Код, который я привел - всего лишь пример использования созданных функций. Ввод из файла уж прикручивай сама, смотри предыдущий пример от easybudda, там все четко и понятно - ввод имени файла, открытие, чтение, закрытие файла, и все с проверками. Ничего сложного, запросто разберешься.
0
15.02.2011, 10:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2011, 10:17
Привет! Вот еще темы с ответами:

Cтрока: Определить количество средних слов в строке и какое из слов начинается на большую по коду букву - C++
Определить количество средних слов в строе и какое из слов начинается на большую по коду букву. Напишите плз код данной программы...

Слова на букву "А" в тексте переписать в обратном порядке, определить количество предложений в тексте - C++
Как решить задачу на с++? В тексте все слова, начинающиеся на букву 'A', переписать в обратном порядке. Определить количество...

Определить в строке количество слов, оканчивающихся на "w" - C++
Дан массив типа char. определить количество слов оканчивающихся на w.

Через функцию определить гласную букву - C++
Написать функцию glasn, которая возвращает 1, если символ, полученный функцией в качестве аргумента, является глас ной буквой...


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

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

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