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

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

26.03.2016, 17:50. Просмотров 178. Ответов 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 минут
http://www.cyberforum.ru/cpp-beginners/thread1676658.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2016, 17:50
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Используя заданные разделители продублировать слова-палиндромы через один пробел (C++):

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

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

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

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

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

2
MrFluderasT
26.03.2016, 19:09
  #2

Не по теме:

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

0
lokasan
0 / 0 / 1
Регистрация: 24.04.2015
Сообщений: 17
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 слова через пробел)
Понимаю, что вопрос очень простой, но сам ответа на него найти не могу уже не...

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

Считать 2 слова из файла через пробел и сравнить их со словом No или Yes
В файле input.txt записаны два слова через пробел. &quot;Yes&quot; и &quot;No&quot;. Нужно считать...

Как записать построчно слова через пробел в текстовый файл?
В каждую строку вводит только по одному слову, весь нет обрыл не могу найти....


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

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

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