Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/96: Рейтинг темы: голосов - 96, средняя оценка - 4.94
-7 / 0 / 0
Регистрация: 01.08.2011
Сообщений: 9

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

02.08.2011, 06:53. Показов 19886. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
напишите пожалуйста в С++
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.08.2011, 06:53
Ответы с готовыми решениями:

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

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

Программа, которая считывает английский текст из файла и выводит на экран слова текста, оканчивающиеся на гласные
using System; using System.IO; using System.Text.RegularExpressions; using System.Linq; static class Program { public...

20
 Аватар для Olga_
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
02.08.2011, 12:13
Это очень просто, только нет резона все это делать.

Добавлено через 12 минут
Самый простой способ, но можно и круто оптимизировать.

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
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define GLAS "AEIOUYaeiouy"  
 
 
int PrintWords(char *fileName)
{
   FILE *f;
   char s[500];
   if ((f = fopen(fileName, "rt")) == NULL)
      return 1;
   while (fscanf(f, "%s", s) != EOF)
   {
      if (strchr(GLAS, s[0]) && strchr(GLAS, s[strlen(s)-1]))
         puts(s);
   }
   fclose(f);
   return 0;
}
 
int main()
{
   char *fileName = "c:\\a.txt";
   PrintWords(fileName);
   getchar();
   return 0;
}
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
02.08.2011, 13:49
Вот пример "оптимизации"
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
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
 
bool is_vowel(char ch)
{
    bool ret = false;
    ch = toupper(ch);
    char vowel[] = "AEIOUY";
    int sLen = strlen(vowel);
    for(int i = 0;i < sLen; i++)
    {
        if(ch == vowel[i])
            break;
    }
    if(i < sLen)
        ret = true;
    return ret;
}
 
int main()
{
    int Len = 0;
    FILE * f;
    char fPath[256], *pch, *str;
    do
    {
        printf("Enter FileName with text : ");
        scanf("%s",fPath);
        if(!(f = fopen(fPath,"rb+")))
            printf("ERROR ACCESS %s\r\n",fPath);
        else
        {
            fseek(f,0,SEEK_END);
            Len = ftell(f);
            fseek(f,0,SEEK_SET);
 
            str = new char[Len];
            if(!str)
            {
                printf("ERROR ALLOC MEMORY\r\n");
                return 1;
            }
            else
                fread(str,1,Len,f);
                str[Len] = '\0';
            fclose(f);
 
            pch = strtok(str," ,.!?\r\n");
            while(pch)
            {
                if(is_vowel(pch[0]) || is_vowel(pch[strlen(pch) - 1]))
                    printf("%s\r\n",pch);
                pch = strtok(NULL," ,.!?\r\n");
            }
        }
        printf("[Y/N] Y - scan new file\r\n");
    }
    while(toupper(getch()) == 'Y');
    return 0;
}
Миниатюры
Написать программу, которая считывает английский текст из файла и выводит на экран слова текста, начинающиеся и оканчивающиеся на гласные буквы.  
Вложения
Тип файла: txt text.txt (4.3 Кб, 227 просмотров)
1
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
02.08.2011, 13:51
-=ЮрА=-, а в чём оптимизация?
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
02.08.2011, 13:54
Пример Ольги недочитал входной файл text.txt который привёл в качестве примера...

Добавлено через 1 минуту
Цитата Сообщение от grizlik78 Посмотреть сообщение
-=ЮрА=-, а в чём оптимизация?
В том что мой алгоритм работает для любого текстового файла. Оптимизации нет, есть другой алгоритм
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
02.08.2011, 13:57
"Наполовину" работает. Наверное задание не дочитал.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
02.08.2011, 13:58
оканчивающиеся буквы не доглядел, момент...
0
 Аватар для Olga_
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
02.08.2011, 13:58
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Пример Ольги недочитал входной файл text.txt который привёл в качестве примера...

Добавлено через 1 минуту

В том что мой алгоритм работает для любого текстового файла. Оптимизации нет, есть другой алгоритм
А можно выложить этот файл text.txt для теста, тогда скажу в чем дело. У меня все работает.
И почему вместо
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool is_vowel(char ch)
{
        bool ret = false;
        ch = toupper(ch);
        char vowel[] = "AEIOUY";
        int sLen = strlen(vowel);
        for(int i = 0;i < sLen; i++)
        {
                if(ch == vowel[i])
                        break;
        }
        if(i < sLen)
                ret = true;
        return ret;
}
просто не написать if (strchr("AEIOUY", ch))
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
02.08.2011, 14:04
Цитата Сообщение от grizlik78 Посмотреть сообщение
И в шутку не дописал. Наверное задание не дочитал.
Уже исправил код в посте

Добавлено через 47 секунд
Цитата Сообщение от Olga_ Посмотреть сообщение
А можно выложить этот файл text.txt для теста, тогда скажу в чем дело. У меня все работает.
Посмотри вложения в моем посте...

Добавлено через 2 минуты
Последними словами на выводе должны быть
A
collapse
in
relativity
emission
of
and
in

У тебя программа выводит

Once
escape
a
energy
a
are
a
inside
a
a
a
a
A
, даже последнего слова in нет
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
02.08.2011, 14:10

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
, даже последнего слова in нет
Смешно. После того, как "дочитал" задание



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

Добавлено через 2 минуты
Но по-моему имелись в виду всё-таки те слова, которые одновременно и начинаются и заканчиваются гласными. Иначе правильнее было бы слово "слова" использовать в задании дважды: слова начинающиеся и слова заканчивающиеся гласными буквами.
0
 Аватар для Olga_
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
02.08.2011, 14:16
Так в чем же ошибка? Во первых однобуквенные слова - тоже слова, а во-вторых, слово 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
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define GLAS "AEIOUYaeiouy"  
#define DELIMITERS  " .,:;\n\t"
 
int ReadTextFile(char *fileName)
{
   FILE *f;
   char line[500], *word;
   if ((f = fopen(fileName, "rt")) == NULL)
      return 1;
   while (fgets(line, 500, f) != NULL)
   {
      word = strtok(line, DELIMITERS);
      while (word != NULL)
      {
         if (strchr(GLAS, word[0]) && strchr(GLAS, word[strlen(word)-1]))
            puts(word);
         word = strtok(NULL, DELIMITERS);
      }
   }
   fclose(f);
   return 0;
}
 
 
int main()
{
   char *fileName = "c:\\a.txt";
   ReadTextFile(fileName);
   return 0;
}
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
02.08.2011, 14:29
Цитата Сообщение от grizlik78 Посмотреть сообщение
Но по-моему имелись в виду всё-таки те слова, которые одновременно и начинаются и заканчиваются гласными. Иначе правильнее было бы слово "слова" использовать в задании дважды: слова начинающиеся и слова заканчивающиеся гласными буквами.
Всё с водится к реализации условия в строке 54 моего кода
Вот возможные варианты вывода, а дальше уже как кому нужно
C++
1
2
3
4
if(is_vowel(pch[0]) ) - выводятся слова только начинающиеся на гласную
if(is_vowel(pch[strlen(pch) - 1])) - выводятся слова только заканчивающиеся на гласную
if(is_vowel(pch[0]) || is_vowel(pch[strlen(pch) - 1])) - слова начинающиеся или заканчивающиеся на гласную
if(is_vowel(pch[0]) && is_vowel(pch[strlen(pch) - 1])) - слова ожновременно начинающиеся и оканчивающиеся на гласную
Добавлено через 8 минут
Цитата Сообщение от Olga_ Посмотреть сообщение
Так в чем же ошибка? Во первых однобуквенные слова - тоже слова, а во-вторых, слово in не должно по заданию выводится. Сказано же "...начинающиеся и оканчивающиеся на гласные буквы"
В том что твой код не выводит ещё 4 слова, сравни работу своего алгоритма с моим, если тебе это сложно то вод вывод консолей с моего и твоего приложения
Мой
Enter FileName with text : text.txt
вывод
a
influence
any
opposite
a
above
a
once
usually
universe
eventually
a
example
a
a
a
a
a
also
energy
are
undergo
a
a
a
a
a
are
a
envelope
a
a
a
accrete
a
undergo
a
Ia
are
above
a
any
Once
escape
a
energy
a
are
a
inside
a
a
a
a
A

[Y/N] Y - scan new file
Твой
a
influence
any
opposite
a
above
a
once
usually
eventually
a
a
a
a
a
a
also
energy
are
undergo
a
a
a
a
a
are
a
envelope
a
a
a
accrete
a
undergo
a
Ia
are
above
a
any
Once
escape
a
energy
a
are
a
inside
a
a
a
a
A


отличие 4 слова, хочешь проверь сам...

Добавлено через 31 секунду
В строке 54 использовал такое условие
C++
1
if(is_vowel(pch[0]) && is_vowel(pch[strlen(pch) - 1]))
0
 Аватар для Olga_
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
02.08.2011, 14:31
Все элементарно, код в посте 2 учитывает только такие разделители: \0, \n, \t, поэтому и говорилось, что это простой вариант.
В посте 11 задание четко выполнено, причем код не нагромажден.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
02.08.2011, 15:00
Цитата Сообщение от Olga_ Посмотреть сообщение
Все элементарно, код в посте 2 учитывает только такие разделители: \0, \n, \t, поэтому и говорилось, что это простой вариант.
В посте 11 задание четко выполнено, причем код не нагромажден.
Задание не выполнено т.к. программа не работает с предложенным txt-шником!
Вот тебе сравнительная характеристика вывода консолей в xls (см 10,11 строки), что касается кода, я специально вобью сейчас в текстовик слово из 501 буквы и твой fscanf если не опрокинется то недочитает слово...
Вложения
Тип файла: xls Сравнительный анализ.xls (14.5 Кб, 23 просмотров)
0
 Аватар для Olga_
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
02.08.2011, 15:15
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Задание не выполнено т.к. программа не работает с предложенным txt-шником!
Вот тебе сравнительная характеристика вывода консолей в xls (см 10,11 строки), что касается кода, я специально вобью сейчас в текстовик слово из 501 буквы и твой fscanf если не опрокинется то недочитает слово...
Кто-то считать плохо умеет. Выводит ровно 56 слов (новый код из 11 поста). А про 500 это ты зря, это пример, можно динамический массив сделать, можно всякие случае рассмотреть, что ты как маленький.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
02.08.2011, 15:26
Цитата Сообщение от Olga_ Посмотреть сообщение
while (fgets(line, 500, f) != NULL)
* *{
* * * word = strtok(line, DELIMITERS);
* * * while (word != NULL)
* * * {
* * * * *if (strchr(GLAS, word[0]) && strchr(GLAS, word[strlen(word)-1]))
* * * * * * puts(word);
* * * * *word = strtok(NULL, DELIMITERS);
* * * }
* *}
Код уже разделяет строку на токены, поэтому использован уже мой алгоритм, я не маленький, я показал как нужно...
0
 Аватар для Olga_
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
02.08.2011, 15:41
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Код уже разделяет строку на токены, поэтому использован уже мой алгоритм, я не маленький, я показал как нужно...
Да, про strtok трудно мне было догадаться, я тут плагиатом занимаюсь, весело... Я могу функцию прописать, которая быстрее strtok работает. strtok это просто для примера. А про 'как маленький', извиняюсь, если обидела.
0
 Аватар для Mиxaил
542 / 447 / 162
Регистрация: 10.12.2009
Сообщений: 1,857
02.08.2011, 15:44
Zend, закрой тему во фрилансе!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
02.08.2011, 20:19
Было уже много раз... Вот ещё кусок быдлокода...
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
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
 
#define VOWELS "AEIOUYaeiouy"
 
int goodword(const char * w) { return ( w && *w && strchr(VOWELS, *w) && strchr(VOWELS, *(w + strlen(w) - 1)) ); }
 
char * clearword(char * w){
    char * p;
    
    for ( p = w; *p; ++p )
        ;
    while ( p > w ){
        if ( ispunct(*--p) )
            *p = '\0';
        else
            break;
    }
    
    return w;
}
 
#define MAX_WORD 256 /* Если напишите слово длиннее - просто попробуйте его вслух прочитать */
#define WORD_MASK "%255s"
#define PROG_NAME argv[0]
#define INPUT_FILE argv[1]
 
int main(int argc, char ** argv){
    char buf[MAX_WORD];
    FILE * f;
    int cnt;
    
    if ( argc < 2 ){
        fprintf(stderr, "Usage: %s input_file\n", PROG_NAME);
        exit(1);
    }
    
    if ( ! ( f = fopen(INPUT_FILE, "r") ) ){
        fprintf(stderr, "%s: can't open input file!\n", PROG_NAME);
        exit(1);
    }
    
    cnt = 0;
    while ( fscanf(f, WORD_MASK, buf) == 1 )
        if ( goodword(clearword(buf)) )
            printf("%3d: %s\n", ++cnt, buf);
        
    if ( ferror(f) || fclose(f) ){
        fprintf(stderr, "%s: error while reading input file!\n", PROG_NAME);
        exit(1);
    }
    
    exit(0);
}
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
02.08.2011, 21:44
Цитата Сообщение от easybudda Посмотреть сообщение
Вот ещё кусок быдлокода...
И еще
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
#include<iostream>
#include<fstream>
#include<string>
#include<sstream>
 
 
struct string:public std::basic_string<char, std::char_traits<char>, std::allocator<char> >{
    operator bool(){
        std::string vowel("AEIOUYaeiouy");
        return _Mysize!=0 &&  //скорее всего это будет работать только в MSVS
            vowel.find(_Myptr()[0])!=std::string::npos &&
            vowel.find(*(_Myptr() + this->_Mysize-1))!=std::string::npos;
 
    }
};
 
 
int main(){
    std::ifstream f("ttext.txt");
    if(f)
        std::cin.rdbuf(f.rdbuf());
    else 
        std::cerr<<"Can't open file!\n\nEnter string: ";
    string str;
    std::istringstream is;
    while(getline(std::cin,str) && str!=""){
    is.str(str);
    while(is>>str)
        if(str)
            std::cout<<str<<std::endl;
    is.clear();
    }
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.08.2011, 21:44
Помогаю со студенческими работами здесь

Написать программу, которая считывает английский текст из файла и выводит на экран слова, начинающиеся с гласных букв
Написать программу, которая считывает английский текст из файла и выводит на экран слова, начинающиеся с гласных букв. Выполнить обработку...

Написать программу, которая считывает английский текст из файла и выводит на экран слова, начинающиеся с гласных букв
Подобных задачек с решениями тут было предостаточно, но мне была неясна даже суть алгоритмов. Посему, преподаватель не поверил бы, что я...

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

Написать программу, которая считывает английский текст из файла и выводит на экран слова, начинающиеся с гласных букв
Голова не соображает, выведите, пожалуйста, строку &quot;Слов, начинающихся на гласные английские буквы, нет&quot; Задание: &quot;Написать...

Написать программу, которая считывает английский текст из файла и выводит на экран слова текста
Написать программу, которая считывает английский текст из файла и выводит на экран слова текста, начинающиеся и заканчивающиеся на гласные...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод Сайт называется reddit: The Thinkpad X220 Tablet is the best budget school laptop period. Это. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru