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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.83
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
#1

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

21.10.2010, 00:42. Просмотров 3067. Ответов 11
Метки нет (Все метки)

Всем доброго времени суток, объяснить пожалуйста, как можно сравнить переменную типа структуры с переменной стандартного типа библиотеки C++.

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

C++
1
2
3
if (int stdvar == structType structVar.blablabla)
cout << "Переменные равны";
else cout << "Не равны";
Заранее спасибо. =)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2010, 00:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сравнение переменных структурного типа (C++):

Сравнение переменных типа стринг - C++
Помогите разобраться что не так в программе. Сама программа большая, работает хорошо, но непонятный момент примерно состоит в следующем: ...

Сравнение нескольких переменных типа стринг - C++
Есть код, в котором нужно сравнивать 3 временных промежутка, и по результатом сравнения выводит, как не странно, результат. Все бы хорошо,...

Функция структурного типа - C++
Работа программы состоит в том что вводится два времени они переводятся в секунды и есть функция структурного типа которая должна разбить...

Ошибка в определении структурного типа - C++
В строке 40 выдает ошибку &quot;error C2440: 'initializing' : cannot convert from 'int' to 'char *'. Помогите, пожалуйста, исправить ее ...

Динамический массив из элементов структурного типа - C++
Помогите пожалуйста выполнить следующее задание: 1.Сформировать динамический массив из элементов структурного типа. стуктура : ...

Записи данных структурного типа в файл... - C++
Составить программу для записи данных структурного типа в файл. Ввод информации осуществлять с использованием функций высокого уровня,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
21.10.2010, 00:43 #2
selevit, Определить оператор сравнения, например.
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
21.10.2010, 00:45 #3
А нельзя сравнить с конкретным полем структуры?
accept
4821 / 3241 / 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
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
4821 / 3241 / 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
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
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
21.10.2010, 17:59 #8
selevit, a[i].name[i] соотвественно.
С-строки сравниваются strcmp или memcpy
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
21.10.2010, 19:59  [ТС] #9
Цитата Сообщение от Lavroff Посмотреть сообщение
selevit, a[i].name[i] соотвественно.
Спасибо =)
accept
4821 / 3241 / 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
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
22.10.2010, 09:29 #11
accept, Ага. Описка вышла
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
22.10.2010, 10:08  [ТС] #12
accept, я просто понял, что я неправильно делал - я сравнивал массив с элементом массива.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2010, 10:08
Привет! Вот еще темы с ответами:

Динамический массив из элементов структурного типа - C++
Сформируйте и выведите на печать динамический массив из элементов структурного типа. Выполните поиск элементов в массиве, удовлетворяющих...

Сформировать динамический массив из элементов структурного типа - C++
1.Сформировать динамический массив из элементов структурного типа. struct реrson { char*name; char *adres; int age; }; ...

Сформировать динамический массив из элементов структурного типа - C++
struct student { char*name; int kurs; float rating };

Определите размер структурного типа(с++).Мотивируйте свой ответ - C++
struct{ double**y; union{ double u; long v; char e; }un; char z; int x:10; int k:6;


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.10.2010, 10:08
Ответ Создать тему
Опции темы

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