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

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

26.03.2016, 17:50. Просмотров 531. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2016, 17:50
Ответы с готовыми решениями:

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

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

Вывести на экран через один пробел последние буквы каждого слова
Дана текстовая строка, состоящая из слов, разделенных одним пробелом. Вывести на экран через один...

Слова текста из малых латинских букв записаны не менее чем через один пробел
Слова текста из малых латинских букв записаны не менее чем через один пробел; текст оканчивается...

2
MrFluderasT
26.03.2016, 19:09
  #2

Не по теме:

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

0
0 / 0 / 0
Регистрация: 24.04.2015
Сообщений: 18
26.03.2016, 19:12  [ТС] 3
Слова - палиндромы, это такие слова, которые читаются одинаково с конца слова и начала : kook, kk, kaak...11,22,333,3663 и т.д.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2016, 19:12

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

Показать все слова строки используя указанные разделители
Здравствуйте, напишите пожалуйста программу по данной задаче (Раздел &quot;Обработка строковой...

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

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

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


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

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

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