Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 02.10.2010
Сообщений: 27
1

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

07.02.2011, 16:21. Показов 5718. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.02.2011, 16:21
Ответы с готовыми решениями:

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

Строка: Подсчитать количество слов в тексте, которые заканчиваются на гласную букву...
Оформить каждый пункт задачи выбранного варианта в виде функции. Все необходимые данные для функций...

Определить количество слов в тексте, начинающихся на гласную букву
Доброго времени суток, прошу помощи с написанием кода. Дан текст из нескольких строк: 1...

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

19
Freelance
Эксперт С++
2885 / 1820 / 356
Регистрация: 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
0 / 0 / 0
Регистрация: 02.10.2010
Сообщений: 27
07.02.2011, 16:28  [ТС] 3
Спасибо, а можно всю программу и нас просят её сделать на QC
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11055 / 7011 / 1657
Регистрация: 25.07.2009
Сообщений: 12,775
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
0 / 0 / 0
Регистрация: 02.10.2010
Сообщений: 27
07.02.2011, 16:53  [ТС] 5
Шикарно, огромное спасибо

PS. Это конечно не обязательно, но вариант для русского текста можно?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11055 / 7011 / 1657
Регистрация: 25.07.2009
Сообщений: 12,775
07.02.2011, 16:58 6
Цитата Сообщение от Larka91 Посмотреть сообщение
но вариант для русского текста можно?
Их аж три, как минимум - cp866(DOS), cp1251(Windows), utf-8(UNICODE)
Вам для какого "русского текста" нужно?
0
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
07.02.2011, 17:06 7
QT мб ? Оо
0
0 / 0 / 0
Регистрация: 02.10.2010
Сообщений: 27
15.02.2011, 01:45  [ТС] 8
Спасибо за работающую программу, но тут проблема, можно ли ее скорректировать под некоторые условия

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

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

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

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

Добавлено через 31 минуту
Помогите((
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11055 / 7011 / 1657
Регистрация: 25.07.2009
Сообщений: 12,775
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;
}
3
В астрале
Эксперт С++
8036 / 4793 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.02.2011, 19:54

Подсчитать в тексте (из файла) количество слов, заканчивающихся на гласную букву
Помогите, зарание спасибо. Дан текст, хранящийся в текстовом файле. Подсчитать в тексте количество...

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

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

Определить, каких слов в тексте больше: которые начинаются на гласную или на согласную букву?
В файле записано стихотворение (возьмите любимое или произвольное). Выведите его на экран, а также...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru