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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.76
ms.natali
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 14
#1

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

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

Испульзую

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

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

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

Желательно с примером. заранее спасибо=)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2012, 12:09     Объясните как правильно сравнить переменные типа char
Посмотрите здесь:

C++ Как сравнить две переменные string
C++ Оператор IF. Как сравнить *char' ы ?
C++ Как сравнить char и const char?
C++ Как сравнить переменную типа char
C++ Создать бинарное дерево, по правой ветке - переменные типа инт, по левой - 2 переменные типа чар
Аргумент типа char (*)[1000] несовместим с параметром типа char** C++
C++ Определить массив, создать две переменные типа указатель и сравнить
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Duha666
50 / 50 / 5
Регистрация: 10.03.2012
Сообщений: 138
19.03.2012, 12:12     Объясните как правильно сравнить переменные типа char #2
Вполне работает:
C++
1
if (strcmp(str1, str2) == 0)
Точно равные?
ms.natali
0 / 0 / 0
Регистрация: 16.03.2012
Сообщений: 14
19.03.2012, 12:22  [ТС]     Объясните как правильно сравнить переменные типа char #3
Вот код. попробуйте сами.
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 строчке здесь просто для проверки
Duha666
50 / 50 / 5
Регистрация: 10.03.2012
Сообщений: 138
19.03.2012, 12:35     Объясните как правильно сравнить переменные типа char #4
Как минимум не хватает библиотек(algorithm, cstring). Закомпилить код под GCC так и не смог.

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

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

А STL я всё равно пока пользоваться не буду=) но спасибо, почитаю об этом на досуге
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2012, 12:58     Объясните как правильно сравнить переменные типа char
Еще ссылки по теме:

Вывод переменных типа char: правильно выводится только первый символ C++
C++ Как сравнить два указателя типа char?
Нужно сравнить две переменные типа string C++
Добавление в массив типа char * одного элемента типа char C++
C++ Объясните непрогнозируемый результат переполнение типа char

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

Или воспользуйтесь поиском по форуму:
Duha666
50 / 50 / 5
Регистрация: 10.03.2012
Сообщений: 138
19.03.2012, 12:58     Объясните как правильно сравнить переменные типа char #8
Одна из возможных причин - локальные массивы "c" и "b". Только глобальные переменные(те, что вне функции) изначально обнулены. А эти массивы наполнены случайными числами. Надо либо сделать их глобальными, либо обнулять.
И ещё:
1. Попробуйте воспользоваться отладчиком
2. Не совсем правильные данные, чередуются "30ч." и "30 ч." и так далее.
Yandex
Объявления
19.03.2012, 12:58     Объясните как правильно сравнить переменные типа char
Ответ Создать тему
Опции темы

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