Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
3 / 3 / 1
Регистрация: 04.04.2018
Сообщений: 351

Сравнение char массивов не работает

14.10.2019, 21:16. Показов 2435. Ответов 2

Студворк — интернет-сервис помощи студентам
Ребят привет, такой вопрос почему строка:
C++
1
2
3
if (str1 == str2) {
        cout << "isPolindrom" << endl;
}
Не работает так как я думаю - проверка до терминирующего нуля (\0) ведь будет правильно? Тогда почему оно не работает? Из-за того что я лишнюю память выделил и она всё подряд даже после \0 проверяет?
Реализовал чуть ниже:
C++
1
2
3
4
5
6
7
8
if (strlen(str1) == strlen(str2)) {
        for (int i = 0; i < strlen(str1); i++)
        {
            if (isRavni && str1[i] != str2[i]) {
                isRavni = false;
            }
        }
    }
всё работает верно
Сама программа убирает пробелы и проверяет на полиндром
p.s. только не говорите про динамическую память указатели и тд, я знаю что можно нормально сделать, просто интересно почему вот так не сравнивает
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
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "Rus");
    const int MAX = 2000;
    char str1[MAX], str2[MAX], str[MAX];
    int j = 0, k = 0,howdelete = 0;
    bool isRavni = true;
    cout << "Input line\n";
    cin.get(str,MAX,'.');
    for (int i = 0; i < strlen(str); i++)
    {
        if (str[i] != ' ') {
            str1[j]=str[i];
            j++;
        }
        else {
            howdelete++; 
        }
    }
    str1[(strlen(str)-howdelete)] = '\0'; 
    cout << "String without space:" << str1 << endl;
    howdelete = 0;
    for (int i = strlen(str1)-1; i >=0; i--)
    {
        str2[k]=str1[i];
        k++;
    }
    str2[strlen(str1)] = '\0'; 
    cout <<"Reverse string:" << str2 << endl;
 
    if (str1 == str2) {
        cout << "isPolindrom" << endl;
    }
 
    //вот накидал простенькое сравнение
    if (strlen(str1) == strlen(str2)) {
        for (int i = 0; i < strlen(str1); i++)
        {
            if (isRavni && str1[i] != str2[i]) {
                isRavni = false;
            }
        }
    }
    if(isRavni){cout << "isPolindrom" << endl;}
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.10.2019, 21:16
Ответы с готовыми решениями:

Сравнение 2-ух char массивов
Помогите. Имеется 2 char массива. Один содержит слово вводимое пользователем, а второй это же слово, только наоборот. Необходимо сравнить...

Сравнение массивов типа Char
У меня есть структура. Мне нужно проверит, (sportsmens.Sport==&quot;swimming&quot;); sportsmens.Sport - массив типа char

Сравнение двух символьных массивов - char C++
Доброго времени суток! Столкнулся с проблемой кода программы. Мне нужно сравнить текст из файла (primer.txt), и сравнить его с текстом,...

2
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
14.10.2019, 22:36
Лучший ответ Сообщение было отмечено dimmarvel как решение

Решение

dimmarvel, У char-строк нет такой операции "==" Это тебе не стринги (класс есть такой) Посему сравниваются указатели. А они - разные. Даже если содержимое строк одинаково.
Зато есть функция strcmp. И вот она делает почти именно то, что у тебя во втором коде. Поэффективнее, конечно...
0
фрилансер
 Аватар для Алексей1153
6454 / 5655 / 1129
Регистрация: 11.10.2019
Сообщений: 15,054
15.10.2019, 08:19
ещё вот так можно сравнить, не строя велосипедов

C++
1
if (std::string(str1) == str2)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.10.2019, 08:19
Помогаю со студенческими работами здесь

Сравнение текста из файла и сравнение с текстом в программе char - Dev C++
Доброго времени суток! Имеется код программы: ifstream test(&quot;primer.txt&quot;); char awm = &quot;kod&quot;; char buff; test &gt;&gt; buff; if...

Сравнение разных типов *Char и Char
Друзья, выполняю задание по имитации консольной команды Windows. Встретился с проблемой разделения введенной строки на отдельные слова, но...

Почему у массивов типа char может быть утечка памяти, а у указателей char с выделенной памятью - нет?
Тут будет утечка памяти: #include&lt;iostream&gt; using namespace std; int main() { char name; cin &gt;&gt; name; cout &lt;&lt;...

Сравнение массивов: найти максимальное перебором массивов
Добрый вечер такая проблема даны два одномерных массива A, B причем в каждом массиве записанно число по разрядно Задачи найти...

Сравнение char
Всем привет. Программа получающая данные по ком-порту. Данные считываются побайтово. Полученные данные надо писать в файл в определённом...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru