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

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

31.07.2017, 14:45. Показов 3668. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru