Форум программистов, компьютерный форум CyberForum.ru

Сравнение переменных структурного типа - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.83
selevit
 Аватар для selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
21.10.2010, 00:42     Сравнение переменных структурного типа #1
Всем доброго времени суток, объяснить пожалуйста, как можно сравнить переменную типа структуры с переменной стандартного типа библиотеки C++.

К примеру, нужно, чтобы вот это работало

C++
1
2
3
if (int stdvar == structType structVar.blablabla)
cout << "Переменные равны";
else cout << "Не равны";
Заранее спасибо. =)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
21.10.2010, 00:43     Сравнение переменных структурного типа #2
selevit, Определить оператор сравнения, например.
MILAN
 Аватар для MILAN
883 / 777 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
21.10.2010, 00:45     Сравнение переменных структурного типа #3
А нельзя сравнить с конкретным полем структуры?
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
21.10.2010, 05:44     Сравнение переменных структурного типа #4
они ничем не отличаются

C
1
2
3
4
5
6
7
8
9
10
struct {
    int a;
} s;
 
int b;
 
...
 
    if (b == s.a)
        ;
s - переменная структурного типа
s.a - переменная целого типа
b - переменная целого типа

Добавлено через 1 минуту
C++
1
f (int stdvar == structType structVar.blablabla)
это неправильно, потому что ты переменные создаёшь прямо в условии (то есть они ничем осмысленным не заполнены)

Добавлено через 2 минуты
C++
1
2
    if (int a = 0)
        ;
у меня такое сработало

а такое нет
C++
1
2
    if (int a == int b)
        ;
selevit
 Аватар для selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
21.10.2010, 10:19  [ТС]     Сравнение переменных структурного типа #5
Цитата Сообщение от accept Посмотреть сообщение
это неправильно, потому что ты переменные создаёшь прямо в условии (то есть они ничем осмысленным не заполнены)
это я так написал, для примера, если буквально, то нужно сравнить массив структурного типа с обычным символьным массивом, что то типо этого

C++
1
2
3
4
5
6
7
8
9
structType A[10];
char name[20];
for (int i = 0; i < 10; i++)
    {
        if (name[i] == A[i].name)
            cmp = true;
        else
            cmp = false;
    }
компилятор выдает 2 ошибки

error C2040: ==: "int" отличается по уровням косвенного обращения от "char [20]"
Хотя у меня нет массива типа int и еще одну ошибку - тоже не понял в чем дело.

error C2446: ==: нет преобразования 'char *' в 'int'
Заранее спасибо .
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
21.10.2010, 10:40     Сравнение переменных структурного типа #6
Цитата Сообщение от selevit
массив структурного типа с обычным символьным массивом
массив структурного типа - это массив переменных структурного типа, то есть массив структур
ничем они не отличаются, массивы вне структур и массивы в структурах

C++
1
structType A[10];
что такое structType ? что там ?

C++
1
if (name[i] == A[i].name)
ты сравниваешь разные типы
A[i].name - адрес первого символа в массиве A[i].name
name[i] - значение i-того символа в массиве name

можно сравнивать адрес с адресом или значение со значением

два символьных массива можно сравнить посимвольно, можно через memcmp()
selevit
 Аватар для selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
21.10.2010, 16:33  [ТС]     Сравнение переменных структурного типа #7
ты сравниваешь разные типы
A[i].name - адрес первого символа в массиве A[i].name
name[i] - значение i-того символа в массиве name
т.е если A[i].name - адрес i - го символа массива, то как тогда мне получить значение?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
21.10.2010, 17:59     Сравнение переменных структурного типа #8
selevit, a[i].name[i] соотвественно.
С-строки сравниваются strcmp или memcpy
selevit
 Аватар для selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
21.10.2010, 19:59  [ТС]     Сравнение переменных структурного типа #9
Цитата Сообщение от Lavroff Посмотреть сообщение
selevit, a[i].name[i] соотвественно.
Спасибо =)
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
22.10.2010, 03:33     Сравнение переменных структурного типа #10
Цитата Сообщение от selevit Посмотреть сообщение
т.е если A[i].name - адрес i - го символа массива, то как тогда мне получить значение?
какого i-го символа ?

Цитата Сообщение от accept
A[i].name - адрес первого символа в массиве A[i].name
где тут i-го ?

Цитата Сообщение от Lavroff
С-строки сравниваются strcmp или memcpy
memcmp
cpy - от слова copy
cmp - от слова compare

strcmp и memcmp различаются, вторая функция не реагирует на нуль-символ, в то время как первая функция останавливается на нуль-символе

selevit,
у тебя есть массив структурных переменных, в каждой структурной переменной у тебя массив символьных переменных

s[0].name[0] - в массиве структур получаем доступ к первой структуре, в первой структуре получаем доступ к массиву символов, в массиве символов получаем доступ к первому символу

s[0].name - в массиве структур получаем доступ к первой структуре, в первой структуре получаем доступ к массиву символов, в массиве символов получаем доступ к адресу первого символа

&s[0].name[0] - вот оно как выглядит в полной форме
s[0].name будет неявно преобразовано в &s[0].name[0]

и &s[0].name[0] отличается от s[0].name[0] тем, что первое - это адрес, а второе - это значение

адрес и значение - это разные типы данных
первое имеет тип char *
второе имеет тип char
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
22.10.2010, 09:29     Сравнение переменных структурного типа #11
accept, Ага. Описка вышла
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2010, 10:08     Сравнение переменных структурного типа
Еще ссылки по теме:

Сравнение переменных типа стринг C++
Функция структурного типа C++
Сравнение переменных строк C++

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

Или воспользуйтесь поиском по форуму:
selevit
 Аватар для selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
22.10.2010, 10:08  [ТС]     Сравнение переменных структурного типа #12
accept, я просто понял, что я неправильно делал - я сравнивал массив с элементом массива.
Yandex
Объявления
22.10.2010, 10:08     Сравнение переменных структурного типа
Ответ Создать тему
Опции темы

Текущее время: 09:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru