Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
lokasan
0 / 0 / 0
Регистрация: 24.04.2015
Сообщений: 18
1

Используя заданные разделители продублировать слова-палиндромы через один пробел

26.03.2016, 17:50. Просмотров 184. Ответов 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
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
#define _CRT_SECURE_NO_WARNINGS
#include<string.h>
#include<iostream>
#include<conio.h>
using namespace std;
 
char *chetkiy_palindrom(char* stroka, int N) 
{
    char *p, *proverka, *xranitel, *save = stroka;//сохраняем в указатель изменения
    int  length, nomer = strlen(stroka) + 1;//заранее выделяем один байт для пробела
 
    while (*stroka) 
    {
        //сдвигаем вправо до тех пор, пока не наткнемся на цифру или букву
 
        p = stroka + 1;
        while (*p!=NULL)//пока р является символом или цифрой
            p++;//находимся в этом цикле и сдвигаем вправо до тех пор, пока не встретим абрукадабру или пробел
 
        length = (int)(p - stroka);//находим длину слова
        if (!(length % 2)) //тут определяем слово на четность, ведь нам нужны четные палиндромы
        {
 
            proverka = p - 1;//сдвиг влево на один и присвоение
            xranitel = stroka;//присваиваем переменной хранитель исходную строку
            while ((stroka < proverka) && (*stroka == *proverka)) //цикл на проверку слова на палиндром
            {
                stroka++;//сдвигаем строку вправо для проверки следующего  символа по условию цикла
                proverka--;//тоже самое, но влево
            }
 
            if (stroka > proverka) {
                if ((nomer + length + 1) >= N)//проверка на переполнение массива символов
                    break;
 
                
                memmove(p + 1, xranitel, nomer * sizeof(char));//nomer умножить на размер типа чар, т.е на 1(копирую определенное количество байт из хранителя в п+1)
                *p = ' ';
                p += length + 1;//сдвигаемся к нулевому байту
            }
        }
        stroka = p;//чтобы выйти из цикла 
    }
    return save;
}
 void  token(char*st, int N)
{
    char* delitel = " .,?!;'";;
    
    char * pch = strtok(st, delitel); // во втором параметре указаны разделитель (пробел, запятая, точка, тире)
 
    while (pch != NULL)                         // пока есть лексемы
    {
        
        pch = strtok(NULL, " .,?!;'");
        puts(chetkiy_palindrom(st, N));
        st = pch;
    }
}
 
int main(void) 
{
    setlocale(LC_ALL, "Russian");
    char s[64];
    cout << "Введите строку: ";
    cin.getline(s, 64);
    token(s, sizeof(s) - 1);
    _getch();
    return 0;
}
Добавлено через 17 минут
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2016, 17:50
Ответы с готовыми решениями:

Отредактировать строку, продублировав через один пробел слова, из которых можно составить слова-палиндромы
Отредактировать строку, продублировав через один пробел слова, из которых можно составить...

Найти числа от 1 до 99 - палиндромы, которые при возведении в квадрат также дают палиндромы (используя циклы)
Задание: Натуральное число является палиндромом, если его запись читается одинаково с начала и с...

В строку через пробел вводятся слова. Отсортировать введенные слова по алфавиту. Результат вывести в виде столбца.
В строку через пробел вводятся слова. Отсортировать введенные слова по алфавиту. Результат вывести...

Найти в заданном тексте, состоящем из n строк, все слова палиндромы и числа палиндромы
Сроки жутко горят :( поэтому надеюсь на вашу помощь: Задача: Найти в заданном тексте, состоящем...

Объединить два слова через пробел
Напишите программу, которая запрашивает у пользователя два слова и формирует из них строку таким...

2
MrFluderasT
26.03.2016, 19:09
  #2

Не по теме:

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

0
lokasan
0 / 0 / 0
Регистрация: 24.04.2015
Сообщений: 18
26.03.2016, 19:12  [ТС] 3
Слова - палиндромы, это такие слова, которые читаются одинаково с конца слова и начала : kook, kk, kaak...11,22,333,3663 и т.д.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2016, 19:12

Ввести 2 слова через пробел, сравнить их на эквивалентность
#include &quot;stdio.h&quot; #include &quot;iostream&quot; #include &quot;stdlib.h&quot; #include &quot;conio.h&quot; using...

Работа со строками (Не считывает 2 слова через пробел)
Понимаю, что вопрос очень простой, но сам ответа на него найти не могу уже не первый раз. есть...

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


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

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

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