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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 50, средняя оценка - 4.92
Zend
-7 / 0 / 0
Регистрация: 01.08.2011
Сообщений: 9
#1

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

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

напишите пожалуйста в С++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2011, 06:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Написать программу, которая считывает английский текст из файла и выводит на экран слова текста, начинающиеся и оканчивающиеся на гласные буквы. (C++):

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

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

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

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

Написать программу, которая удаляет из текстового файла слова, начинающиеся и оканчивающиеся на гласные буквы - C++
//Написать программу, которая удаляет из текстового файла слова, начинающиеся и оканчивающиеся на гласные буквы. #include <stdio.h> ...

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

20
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
02.08.2011, 12:13 #2
Это очень просто, только нет резона все это делать.

Добавлено через 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
02.08.2011, 13:49 #3
Вот пример "оптимизации"
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;
}
0
Миниатюры
Написать программу, которая считывает английский текст из файла и выводит на экран слова текста, начинающиеся и оканчивающиеся на гласные буквы.  
Вложения
Тип файла: txt text.txt (4.3 Кб, 155 просмотров)
grizlik78
Эксперт С++
1957 / 1450 / 116
Регистрация: 29.05.2011
Сообщений: 3,012
02.08.2011, 13:51 #4
-=ЮрА=-, а в чём оптимизация?
0
-=ЮрА=-
Заблокирован
Автор FAQ
02.08.2011, 13:54 #5
Пример Ольги недочитал входной файл text.txt который привёл в качестве примера...

Добавлено через 1 минуту
Цитата Сообщение от grizlik78 Посмотреть сообщение
-=ЮрА=-, а в чём оптимизация?
В том что мой алгоритм работает для любого текстового файла. Оптимизации нет, есть другой алгоритм
0
grizlik78
Эксперт С++
1957 / 1450 / 116
Регистрация: 29.05.2011
Сообщений: 3,012
02.08.2011, 13:57 #6
"Наполовину" работает. Наверное задание не дочитал.
0
-=ЮрА=-
Заблокирован
Автор FAQ
02.08.2011, 13:58 #7
оканчивающиеся буквы не доглядел, момент...
0
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
02.08.2011, 13:58 #8
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Пример Ольги недочитал входной файл 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
02.08.2011, 14:04 #9
Цитата Сообщение от 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
Эксперт С++
1957 / 1450 / 116
Регистрация: 29.05.2011
Сообщений: 3,012
02.08.2011, 14:10 #10

Не по теме:

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



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

Добавлено через 2 минуты
Но по-моему имелись в виду всё-таки те слова, которые одновременно и начинаются и заканчиваются гласными. Иначе правильнее было бы слово "слова" использовать в задании дважды: слова начинающиеся и слова заканчивающиеся гласными буквами.
0
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
02.08.2011, 14:16 #11
Так в чем же ошибка? Во первых однобуквенные слова - тоже слова, а во-вторых, слово 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
02.08.2011, 14:29 #12
Цитата Сообщение от 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_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
02.08.2011, 14:31 #13
Все элементарно, код в посте 2 учитывает только такие разделители: \0, \n, \t, поэтому и говорилось, что это простой вариант.
В посте 11 задание четко выполнено, причем код не нагромажден.
0
-=ЮрА=-
Заблокирован
Автор FAQ
02.08.2011, 15:00 #14
Цитата Сообщение от Olga_ Посмотреть сообщение
Все элементарно, код в посте 2 учитывает только такие разделители: \0, \n, \t, поэтому и говорилось, что это простой вариант.
В посте 11 задание четко выполнено, причем код не нагромажден.
Задание не выполнено т.к. программа не работает с предложенным txt-шником!
Вот тебе сравнительная характеристика вывода консолей в xls (см 10,11 строки), что касается кода, я специально вобью сейчас в текстовик слово из 501 буквы и твой fscanf если не опрокинется то недочитает слово...
0
Вложения
Тип файла: xls Сравнительный анализ.xls (14.5 Кб, 18 просмотров)
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
02.08.2011, 15:15 #15
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Задание не выполнено т.к. программа не работает с предложенным txt-шником!
Вот тебе сравнительная характеристика вывода консолей в xls (см 10,11 строки), что касается кода, я специально вобью сейчас в текстовик слово из 501 буквы и твой fscanf если не опрокинется то недочитает слово...
Кто-то считать плохо умеет. Выводит ровно 56 слов (новый код из 11 поста). А про 500 это ты зря, это пример, можно динамический массив сделать, можно всякие случае рассмотреть, что ты как маленький.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2011, 15:15
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
02.08.2011, 15:15
Ответ Создать тему
Опции темы

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