Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 5.00
Larka91
 Аватар для Larka91
0 / 0 / 0
Регистрация: 02.10.2010
Сообщений: 27
07.02.2011, 16:21     Определить количество слов в тексте, оканчивающихся на гласную букву #1
Помогите пожалуйста с заданием, особенно пункт 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);
}
но не уверена
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2011, 16:21     Определить количество слов в тексте, оканчивающихся на гласную букву
Посмотрите здесь:

C++ определить количество слов оканчивающихся на w
Определить, сколько слов в тексте начинается на заданную букву C++
Cтрока: Определить количество средних слов в строке и какое из слов начинается на большую по коду букву C++
Работа с лентами (Подсчитать количество слов оканчивающихся на букву о) C++
Через функцию определить гласную букву C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
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;
Larka91
 Аватар для Larka91
0 / 0 / 0
Регистрация: 02.10.2010
Сообщений: 27
07.02.2011, 16:28  [ТС]     Определить количество слов в тексте, оканчивающихся на гласную букву #3
Спасибо, а можно всю программу и нас просят её сделать на QC
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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;
}
Larka91
 Аватар для Larka91
0 / 0 / 0
Регистрация: 02.10.2010
Сообщений: 27
07.02.2011, 16:53  [ТС]     Определить количество слов в тексте, оканчивающихся на гласную букву #5
Шикарно, огромное спасибо

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

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

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

"Использовать только библиотечные функции ввода/вывода слова,
Нельзя использовать функции библиотеки, находящиеся в файле string.h,
Нельзя использовать библиотечные функции работы со строками/словами"
А сразу об этом написать было нельзя? В самом первом сообщении, в формулировке задачи? Нужно уметь уважать и свое время, и чужое.
Напиши функцию, которая будет возвращать указатель на конец очередного слова. Потом проверяй, содержится ли символ, на который указывает возвращаемый указатель, в строке гласных.
Larka91
 Аватар для Larka91
0 / 0 / 0
Регистрация: 02.10.2010
Сообщений: 27
15.02.2011, 09:39  [ТС]     Определить количество слов в тексте, оканчивающихся на гласную букву #10
Извините, не были сразу сказаны условия к заданию не заметили ..
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
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;
}
Larka91
 Аватар для Larka91
0 / 0 / 0
Регистрация: 02.10.2010
Сообщений: 27
15.02.2011, 10:08  [ТС]     Определить количество слов в тексте, оканчивающихся на гласную букву #12
Не работает
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
15.02.2011, 10:09     Определить количество слов в тексте, оканчивающихся на гласную букву #13
Larka91, что именно не работает?
Larka91
 Аватар для 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 прекрасно работающая программа, но под условия задания не подходит вот и проблема
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
15.02.2011, 10:17     Определить количество слов в тексте, оканчивающихся на гласную букву #15
Larka91, и это уже значит "не работает"? Код, который я привел - всего лишь пример использования созданных функций. Ввод из файла уж прикручивай сама, смотри предыдущий пример от easybudda, там все четко и понятно - ввод имени файла, открытие, чтение, закрытие файла, и все с проверками. Ничего сложного, запросто разберешься.
Larka91
 Аватар для Larka91
0 / 0 / 0
Регистрация: 02.10.2010
Сообщений: 27
15.02.2011, 10:24  [ТС]     Определить количество слов в тексте, оканчивающихся на гласную букву #16
Я уже запуталась ...
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
15.02.2011, 10:27     Определить количество слов в тексте, оканчивающихся на гласную букву #17
Larka91, попробуй дописать сама, если не получится - выкладывай код сюда, я скажу, что не так. Подсказка: в моем примере вся полезная работа совершается в строках 17-19, p - указатель на конец очередного слова.
Larka91
 Аватар для Larka91
0 / 0 / 0
Регистрация: 02.10.2010
Сообщений: 27
15.02.2011, 11:18  [ТС]     Определить количество слов в тексте, оканчивающихся на гласную букву #18
Нет, у меня не получается прикрутить ваш код с кодом easybudda

Я понимаю, но всё равно сложно ..

Добавлено через 31 минуту
Помогите((
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
15.02.2011, 16:52     Определить количество слов в тексте, оканчивающихся на гласную букву #19
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Larka91 Посмотреть сообщение
Нельзя использовать функции библиотеки, находящиеся в файле string.h,
Вот честно говоря выбешивают такие запреты... Вот Вам с велосипедами
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
66
67
68
69
70
71
72
73
74
75
76
#include <stdio.h>
/* #include <string.h> */
 
#define DELIM " \t\n,.!?:;-%"
#define VOWELS "AaEeIiOoUuYy"
    
int mystrlen(const char * s){
    const char * p = s;
    while ( *p )
        ++p;
    return p - s;
}
 
char * mystrchr(const char * s, char ch){
    while ( *s && *s != ch )
        ++s;
    return ( *s ) ? (char*)s : NULL;
}
 
char * mystrtok(char * buf, const char * delim){
    static char * pHead, * pTail, * pRet;
    if ( buf ){
        pHead = buf;
        pTail = pHead + mystrlen(pHead);
        for ( pRet = pHead; pRet < pTail; ++pRet )
            if ( mystrchr(delim, *pRet) )
                *pRet = 0;
    }
    while ( ! *pHead && pHead < pTail )
        ++pHead;
    if ( pHead >= pTail )
        return NULL;
    else {
        pRet = pHead;
        pHead += mystrlen(pHead);
    }
    
    return pRet;
}
 
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 = mystrtok(buf, DELIM); p; p = mystrtok(NULL, DELIM) )
                        if ( mystrchr(VOWELS, p[mystrlen(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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2011, 19:54     Определить количество слов в тексте, оканчивающихся на гласную букву
Еще ссылки по теме:

C++ Определить количество слов в тексте
Определить количество слов в тексте C++
Определить количество слов в заданном тексте и количество символов в каждом слове C++

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
15.02.2011, 19:54     Определить количество слов в тексте, оканчивающихся на гласную букву #20
Без string.h инфа 100%.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <string>
#include <sstream>
#include <iostream>
 
int main()
{
    std::string str;
    std::getline(std::cin, str);
    std::string vowels("aAeEiIuUoOyY");
    int cnt=0;
    std::string tmp;
    std::istringstream ist(str);
    while(ist >> tmp)
    {
         std::cout<<tmp<<'\n';
         if(vowels.find(*(--tmp.end())) != std::string::npos)
            cnt++;
     }
     std::cout<<cnt<<'\n';
     return 0;
}
Yandex
Объявления
15.02.2011, 19:54     Определить количество слов в тексте, оканчивающихся на гласную букву
Ответ Создать тему
Опции темы

Текущее время: 05:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru