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

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

Войти
Регистрация
Восстановить пароль
 
YuliYu
0 / 0 / 0
Регистрация: 20.04.2015
Сообщений: 20
#1

Найти и вывести на экран все слова, являющиеся палиндромами - C++

26.11.2015, 05:59. Просмотров 446. Ответов 2
Метки нет (Все метки)

В произвольном тексте (взятом из файла), содержащем не более 10 строк, в каждой строке не более 80 символов, найти и вывести на экран все слова, являющиеся палиндромами (то есть одинаково читающиеся как справа налево, так и слева направо ) и их количество. Результат так же записать в выходной файл (имя задает пользователь).

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

Программа должна вывести на экран - оно, аревера. Но выводит вот так - оонноо, ааррееввеерраа.
Что исправить в программе надо?

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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
 #include "stdafx.h"
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <Windows.h>
 
using namespace std;
 
int Length() //функция, которая возвращает количество символов в файле
{
    ifstream f("input.txt");  //открываем файловый поток чтения данных
    int count = 0; //количество символов
 
    while (!f.eof()) //пока не кончится файл eof - endoffile
    {
        f.get(); //получаем символ
        count++; //увеличиваем на 1 количество
    }
    f.close(); //закрываем поток
    return count; //возвращаем количество
}
void GetText(char *mas, int razm) //Ф-ия получения текста из файла
{
    int i = 0; //индекс элемента массива
    ifstream f("input.txt");
 
    while (!f.eof()) //Проходим по файлу
    {
        f.get(mas[i]); //Записываем символ за символом 
        i++; //передвинули курсор для записи следующего символа
    }
    f.close();
}
void Free(char *mas, int razm) //Ф-ия очистки памяти от мусора
{
    for (int i = 0; i<razm; i++) mas[i] = NULL;
}
void Polinom(char *mas, int NachSlov, int KonSlov, char Name[]) //функция проверки слова (если полиндром, то выводим в файл на экран)
{
    ofstream out(Name, ios::app); //открываем поток с указателем на конец файла
    bool write = true; //переменная определяющая возможность записи
    for (int i = NachSlov, j = KonSlov; i<j; i++, j--) //проверяем палиндром ли слово
    if (mas[i] == mas[j]) {}
    else write = false; // если слово не прошло проверку, значит палиндром
    if (write == true) //если палиндром
    {
        for (int i = NachSlov; i <= KonSlov; i++) //пишем в файле на экран
        {
            cout << mas[i];
            cout << mas[i];
        }
        cout << " ";
        cout << " ";
    }
    out.close();
}
void FindWord(char *mas, int razm, char Name[]) //Функция находит каждое слово
{
    int NachSlov, KonSlov;
    bool FindChar = true; //ищем букву или другой символ
    for (int i = 0; i<razm; i++) //проходим по всему тексту
    {
        if (((mas[i] >= 'а'&& mas[i] <= 'я') || (mas[i] >= 'А'&& mas[i] <= 'Я') ||
            (mas[i] >= 'a'&& mas[i] <= 'z') || (mas[i] >= 'A'&& mas[i] <= 'Z')) && (FindChar == true))  //если буква ищем начало слова
        {
            NachSlov = i; //запоминаем индекс начала слова
            FindChar = false; //переходим к поиску не буквы
        }
        if (((mas[i]<'а' || mas[i]>'я') && (mas[i]<'А' || mas[i]>'Я') &&                //ищем не символ
            (mas[i]<'a' || mas[i]>'z') && (mas[i]<'A' || mas[i]>'Z')) && (FindChar == false))
        {
            KonSlov = i - 1; //запоминаем индекс конца слова
            Polinom(mas, NachSlov, KonSlov, Name); //передаем в функцию слово
            FindChar = true; //переходим к поиску буквы (начала следующего слова)
        }
        if (((mas[i] >= 'а'&& mas[i] <= 'я') || (mas[i] >= 'А'&& mas[i] <= 'Я') ||
            (mas[i] >= 'a'&& mas[i] <= 'z') || (mas[i] >= 'A'&& mas[i] <= 'Z')) && (i == razm - 1)) //если буква и конец текста
        {
            KonSlov = i; //то конец слова, запоминаем
            Polinom(mas, NachSlov, KonSlov, Name); //передаем в функцию
        }
    }
    cout << endl << endl;
}
void GetFileName(char Name[])
{
    cout << "Введите имя файла, куда записать:";
    cin >> Name;
    cout << endl;
}
 
void main()
{
    setlocale(LC_ALL, "Russian");
    int count = Length(); //количество символов в файле
    char *S1 = new char[count]; //динамический массив подтекст
    char outname[255];
    Free(S1, count); //освобождаем массивы от мусора
    GetText(S1, count); //получаем текст в S1
    cout << S1 << endl << endl; //выводим на экран
    GetFileName(outname); //получаем имя файла для записи
    FindWord(S1, count, outname); //обрабатываем текст (ищем и выводим палиндромы)
    system("pause");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2015, 05:59
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Найти и вывести на экран все слова, являющиеся палиндромами (C++):

Найти все слова, являющиеся числами - C++
Прошу помочь кому не трудно с задачкой

Вывести на экран все числа последовательности являющиеся составными и их делители - C++
Поступает последовательность целых положительных чисел, 0 – конец последовательности. Вывести на экран все числа последовательности ...

В строке найти и вывести на экран все слова длиною в три символа - C++
Доброго дня, помогите пожалуйста с C++. Вот условие: 4. В строке найти и вывести на экран все слова длиною в три символа(Описать две...

В предложении найти и вывести на экран все слова, содержащие ровно две буквы “d” - C++
Всем привет! Помогите написать программу! В предложении найти и вывести на экран все слова, содержащие ровно две буквы “d”. Заранее...

В строке, состоящей из слов, найти и вывести на экран все слова, начинающиеся на букву w - C++
В строке , состоящей из слов , найти и вывести на экран все слова , начинающиеся на букву w .

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

2
_Valera_
489 / 371 / 94
Регистрация: 27.01.2015
Сообщений: 1,588
26.11.2015, 07:56 #2
Цитата Сообщение от YuliYu Посмотреть сообщение
Программа должна вывести на экран - оно, аревера. Но выводит вот так - оонноо, ааррееввеерраа.
Цитата Сообщение от YuliYu Посмотреть сообщение
for (int i = NachSlov; i <= KonSlov; i++) //пишем в файле на экран
* * * * {
* * * * * * cout << mas[i];
* * * * * * cout << mas[i];
* * * * }
действительно....
0
YuliYu
0 / 0 / 0
Регистрация: 20.04.2015
Сообщений: 20
24.12.2015, 05:41  [ТС] #3
Подскажите пожалуйста, вот у меня не записывается мой результат в выходной файл. Что надо дописать?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2015, 05:41
Привет! Вот еще темы с ответами:

Вывести на экран все слова палиндромы - C++
Помогите разобраться с задачей. по моей логике вроде верно но всё равно не работает( Вывести на экран все слова палиндромы...

Удалить из строки все слова не являющиеся идентификаторами - C++
Баллов: --/1 Задана строка, состоящая из символов. Символы объединяются в слова. Слова друг от друга отделяются одним или несколькими...

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

Вывести на экран все слова, встречающиеся более 1 раза - C++
Помогите пожалуйста, запуталась в циклах!!! (( Сама задача такова:Дана строка в ней не более 30 слов, в каждом слове не более 8 букв. Слова...


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

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

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