Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/88: Рейтинг темы: голосов - 88, средняя оценка - 4.65
 Аватар для ms.natali
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 14

Объясните как правильно сравнить переменные типа char

19.03.2012, 12:09. Показов 18410. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Испульзую

C++
1
(strcmp(a[i].StNazn,c)==0)
Не работает. Если поменять на
C++
1
(strcmp(a[i].StNazn,c)<0)
Работает, но как-то не правильно.

А про
C++
1
a[i].StNazn==c
я вообще молчу

Так как всё таки правильно сравнить?(Нужно чтобы были равны)
Да, и может дело в том, что в char У меня русские буквы?

Желательно с примером. заранее спасибо=)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.03.2012, 12:09
Ответы с готовыми решениями:

Как сравнить переменные типа object?
Как сравнить три (и более) переменные типа object?

Как сравнить переменную типа char
нужно найти элементы типа char различные от нуля, программу я написал, а вот не получается сравнивать #include &lt;iostream&gt; ...

Как сравнить два указателя типа char?
char *p1; p1 = new char; p1 = &quot;qwert&quot;; char *p2; p2 = new char; p2 = &quot;zz&quot;; if(*p1==*p2) cout &lt;&lt; &quot;Равны! &quot;&lt;&lt; endl; ...

7
53 / 53 / 19
Регистрация: 10.03.2012
Сообщений: 138
19.03.2012, 12:12
Вполне работает:
C++
1
if (strcmp(str1, str2) == 0)
Точно равные?
1
 Аватар для ms.natali
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 14
19.03.2012, 12:22  [ТС]
Вот код. попробуйте сами.
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
75
76
77
78
79
80
81
82
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
struct Tutors
{
    char Nomer[5];
    char StNazn[20];
    char TimeOtpr[20];
    char TimeVputi[20];
    char NalBilet[10];
};
void output ( Tutors a[], int n)
{
    cout<<"Номер|"<<setw(9)<<"Станция Назначения|"<<setw(9)<<"Время отправления|"<<setw(15) 
        <<"Время в пути|"<<setw(7) <<"Наличие билетов|"<<endl;
       for(int i=0;i<n;i++)
       {
           cout<<"__________________________________________________________________________"<<endl;
           cout<<setw(2)<<a[i].Nomer<<"|"<<setw(19)<<a[i].StNazn<<"|"<<setw(17)<<a[i].TimeOtpr<<"|"
               <<setw(14)<<a[i].TimeVputi<<"|"<<setw(15)<<a[i].NalBilet<<"|";
           cout<<endl;
        }
}
void sort(Tutors a[],int n)
{
    Tutors min;
    int n_min;
    for(int i=0;i<n;i++)
    {
        min=a[i];n_min=i;
        for(int j=i;j<n;j++)
            if(strcmp(a[j].TimeOtpr,min.TimeOtpr)<0)
            {
                min=a[j];
                n_min=j;
            }
        a[n_min]=a[i];
        a[i]=min;
        
    }
}
int X(Tutors a[],Tutors b[],int n,char c[20])
{
    int k=0;
    for(int i=0;i<n;i++)
        if ( ! strcmp(a[i].StNazn,c)) b[k++]=a[i];
    return k;
}
int main()
{
    setlocale (LC_CTYPE, "Russian");
 
    Tutors t[10]={
        "126Э","Новороссийск","00:25","30ч.","да",
        "244В","Рузаевка","10:50","10 ч. 13 мин.","нет",
        "232M","Казань","00:30","12 ч. 49 мин.","да",
        "092И","Северобайкальск","12:40","91 ч.","да",
        "356Й","Уфа","12:26","30 ч.","да",
        "252В","Саранск","01:20","10 ч. 18 мин.","нет",
        "030С","Новороссийск","10:20","23 ч. 26 мин.","да",
        "104М","Адлер","08.20","27 ч.","да",
        "082И","Улан-Удэ","13:10","88 ч.","да",
        "076Э","Тында","13:10","116 ч.","нет"
        };
cout<<"input"<<endl<<endl<<endl;
output(t,10);
sort(t,10);
cout<<endl<<endl<<"Out"<<endl<<endl<<endl;
output(t,10);
 
Tutors b[10];
 
cout<<"input Станция назначения";
char c[20];
cout<<"Введите станцию"<<endl;
cin>>c[20];
int k=X(t,b,10,c);
cout<<k;
    if(k!=0) output(b,k);
system("pause");
}
Тут вы вводите станцию назначиня, и программа должна выводить всю инфу по этой станции

Добавлено через 3 минуты
C++
1
cout<<k;
в 79 строчке здесь просто для проверки
0
53 / 53 / 19
Регистрация: 10.03.2012
Сообщений: 138
19.03.2012, 12:35
Как минимум не хватает библиотек(algorithm, cstring). Закомпилить код под GCC так и не смог.

А зачем костыли в виде рукописных сортировок, если есть STL-евый сорт?
0
 Аватар для ms.natali
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 14
19.03.2012, 12:36  [ТС]
Sort сортирует по времени отправления.
Для чего эти библиотеки?

Общайтесь со мной, как с нубом, пожалуйста =)
так что я не понимаю что такое GCC и STL-евый сорт
0
53 / 53 / 19
Регистрация: 10.03.2012
Сообщений: 138
19.03.2012, 12:41
strcmp содержится в cstring. То, что у вас работает значит только одно - среда разработки сама их подключает.
STL - стандатная библиотека шаблонов. В ней содержатся множества крутых алгоритмов, включая быструю сортировку(sort(a, a + 10), в вашем случае)
GCC - стандартный сишный компилятор под линукс
Я проверял strcmp и с русскими буквами, все замечательно работает. Что-то напутано в коде.
1
 Аватар для ms.natali
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 14
19.03.2012, 12:45  [ТС]
И вы, я так понимаю, не видите эту ошибку? =(
Можете хоть подсказать, в каком направлении искать эту ошибку?

А STL я всё равно пока пользоваться не буду=) но спасибо, почитаю об этом на досуге
0
53 / 53 / 19
Регистрация: 10.03.2012
Сообщений: 138
19.03.2012, 12:58
Одна из возможных причин - локальные массивы "c" и "b". Только глобальные переменные(те, что вне функции) изначально обнулены. А эти массивы наполнены случайными числами. Надо либо сделать их глобальными, либо обнулять.
И ещё:
1. Попробуйте воспользоваться отладчиком
2. Не совсем правильные данные, чередуются "30ч." и "30 ч." и так далее.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.03.2012, 12:58
Помогаю со студенческими работами здесь

Как достать из массива char переменные типа double, int, bool
Имеется массив char temp. в этот массив записана переменная double (начинается ,например, с temp), переменные типа bool и int. как их...

Одномерный массив типа char, подскажите как правильно!
Задача стоит в том, есть массив типа char из 10 елементов, сделать так что б 0 елемент массива был @ , а остальные индексы массива...

Сравнить элементы типа char
с++ Вот есть структура **:** часы и минуты struct date { char h; char m; };

Сравнить два массива типа char
char mass1 = { 'c', 'c', 'a', 'c', 'a', 'd', 'd', 'a', 'b', 'b', 'b', 'a', 'c', 'c', 'a', 'a', 'b', 'c', 'a', 'a', 'a', 'a', 'b', 'a', 'c',...

Не складываются переменные типа char
var v1,v2,v3,v4,temp:char; {эти переменные буду сладывать} t1,t2,t3,t4:integer; a:array of record f:string; t:string; ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK сделайте это, JDK, то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера . . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru