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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Проверить, кратно ли произведение двух заданных натуральных чисел третьему числу http://www.cyberforum.ru/cpp-beginners/thread1636734.html
проверить кратно ли произведение натуральных чисел а и б числу с очень надо,помогите пожалуйста
C++ Сколько цифр можно составить из заданных букв? Дана последовательность из букв. Найти сколько цифр можно составить из этих букв, вывести их и то, что осталось невостребованным. Добавлено через 2 часа 47 минут Вот я набросал немного с... http://www.cyberforum.ru/cpp-beginners/thread1636732.html
C++ Вставить в середину записи одного числа другое
Вводятся два числа >=10 и <10^4. Образовать новое число, вставив первое число в середину второго. (Серединой числа с нечетным числом цифр можно считать любой промежуток рядом с центральной цифрой)....
В заданной матрице удалить все столбцы, содержащие максимальные элементы среди диагональных элементов C++
Сгенерировать матрицу размера NxN из случайных числел (N вводится с клавиатуры). Удалить все столбцы, содержащие максимальных элемент среди диагональных элементов матрицы. Распечатать исходную и...
C++ Сортировка массива структур по заданному полю http://www.cyberforum.ru/cpp-beginners/thread1636698.html
Здравствуйте. Нужна помощь в сортировке. Вот само задание: Составить таблицу, содержащую следующие сведения о сотрудниках кафедры: ФИО должность оклад домашний телефон рабочий телефон
C++ Написать функцию замены всех русских символов в строке пробелами Нужно было написать функцию замены всех русских символов в строке пробелами. Написал, но использовал не свою функцию, а стороннюю. Сказали переделать, разработав собственную функцию замены русских... подробнее

Показать сообщение отдельно
YuliYu
0 / 0 / 0
Регистрация: 20.04.2015
Сообщений: 20

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

12.01.2016, 12:48. Просмотров 218. Ответов 0
Метки (Все метки)

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

вот есть код. Программа находит палиндромы, но не записывает их в файл. Что надо изменить в этом месте программы?
C++
1
2
3
4
5
6
void GetFileName(char Name[])
{
    cout << "Введите имя файла, куда записать:";
    cin >> Name;
    cout << endl;
}
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 << " ";
        
    }
    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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru