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

Является ли фраза палиндромом. Указатели.

31.07.2017, 14:45. Показов 3772. Ответов 23

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Решая задачу с палиндромами столкнулся с проблемой,что при изменении данных в одном дочернем массиве, изменяются значения и во всех других ,которые указывают на родительский.
Ох..что-то я непонятно объясняю ...Вот код:
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
#include "stdafx.h"
#include <iostream>
#include <cctype>
#include <string.h>  
#include <stdio.h>  
 
 
void words(char*, char** &, int &);
 
char* invert(char* text)
{
    int d = strlen(text);
    for (int i = 0; i < d / 2; i++)
    {
        char temp = text[i];
        text[i] = text[d - (i + 1)];
        text[d - (i + 1)] = temp;
    }
    return text;
}
int _tmain()
{
 
    const unsigned char N = 80;
    char **array_words = (char**)calloc(1, sizeof(char*));
    char **array_words_for_palindroms = (char**)calloc(1, sizeof(char*));
    int str(0), number_words(0),number_words_for_palindoms(0);
    std::cin >> str;
 
    char **array_string = (char**)calloc(str, sizeof(char*));
    for (int count = 0; count < str; count++)
    {
        array_string[count] = (char*)calloc(N + 1, sizeof(char));
    }
    std::cin.get();
 
    for (int i = 0; i < str; i++)
    {
        std::cin.getline(array_string[i], N);//Заполнение массива из входного потока
        words(array_string[i], array_words, number_words);
        words(array_string[i], array_words_for_palindroms, number_words_for_palindoms);
    }
    for (int i = 0; i < number_words; i++)
    {
        if (strcmp(array_words[i], invert(array_words_for_palindroms[i])) == 0)
            std::cout << "Y ";
        else
            std::cout << "N ";
    }
    
    free(array_words);
    free(array_words_for_palindroms);
    for (int i = 0; i < str; i++)
    {
        free(array_string[i]);
    }
    free(array_string);
    getchar();
    getchar();
    return 0;
}
 
void words(char *str, char** &array_of_words, int &start)
{
    char *p;
    p = strtok(str, " .,!\n\0"); // Разделяет строку на слова , с помощью разделителей
    while (p != NULL)
    {
        start++;
        array_of_words = (char**)realloc(array_of_words, start*sizeof(char*));
        array_of_words[start - 1] = p;
        p = strtok(NULL, " .,!\n\0");
    }
}
У меня получается,что значения из двух массивов при переворачивании всегда одинаковы.(Т.к. разбиваю одну и ту же строку,и указатели на слова записываю в массив,а значит при переворачивании изменяется значение в массиве,указывающим на родительский массив).
Не представляю что делать. Можете,пожалуйста,подсказать.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.07.2017, 14:45
Ответы с готовыми решениями:

Является ли число палиндромом
Алгоритм проверки числа должен быть именно такой (так поставили задачу) Но он работает некорректно. / Число - палиндром #include...

Является ли строка палиндромом
Проверить,является ли строка палиндромом. Прокоментируйте строки пожалуйста

Является ли K-ая строка палиндромом?
Дан текст из нескольких строк, введенных с клавиатуры. Определить является ли заданная (k-ая) строка палиндромом.

23
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
18.08.2017, 19:04
Студворк — интернет-сервис помощи студентам
GbaLog-, здравствуйте! Спасибо за ваше замечание. Я это в книге видел по программированию. Кажется писали, что это в профессиональном стиле так делать. Впредь буду знать, что лучше длину строки указывать Кстати, что лучше по скорости: через терминальный ноль или длину на каждом шаге вычислять?
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
18.08.2017, 19:32
Цитата Сообщение от Fixer_84 Посмотреть сообщение
Кажется писали, что это в профессиональном стиле так делать.
скорее всего, в книге имелся ввиду не std::string, а char */const char *.
в случае с ними проверка на терминальный ноль должна сработать.
Цитата Сообщение от Fixer_84 Посмотреть сообщение
Кстати, что лучше по скорости: через терминальный ноль или длину на каждом шаге вычислять?
в случае с std::string длину вычислять не надо, она хранится в самом классе(см. std::string::size()).
а как пробегать по всей строке - не имеет большого значения.
это не то место, где надо думать об оптимизации, я считаю.
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
18.08.2017, 19:54
GbaLog-, std::string обязана заканчиваться терминальным нулем.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
18.08.2017, 21:16
Цитата Сообщение от avgoor Посмотреть сообщение
std::string обязана заканчиваться терминальным нулем.
следует указать, что это только начиная с с++11.
в с++03 это было не гарантировано.
(см. разницу между data() и c_str() до с++11.)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.08.2017, 21:16

Является ли число палиндромом
Дано натуральное число n (n&gt;=9999). Является ли это число палиндромом (перевертышем) с учетом четырех цифр, как, например, числа 2222,...

Является ли строка палиндромом
#include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; bool palindrom(char s); int main() { char s; ...

Проверка, является ли число палиндромом
Проверить, что данное число читается одинаково слева направо и справа налево.Найдите ошибку #include &quot;stdafx.h&quot; #include...

Является ли это слово палиндромом.
Дано слово, состоящее только из строчных латинских букв. Проверьте, является ли это слово палиндромом. Выведите YES или NO. Ввод...

Проверить является ли слово палиндромом
Символьная строка содержит одно слово. Проверить, будет ли оно читаться одинаково справа налево и слева направо (т.е. является ли оно...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru