Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
nik_neman
0 / 0 / 1
Регистрация: 09.07.2014
Сообщений: 59
1

Плохо сравниваются строки через strcmp

21.05.2015, 20:54. Просмотров 852. Ответов 7
Метки нет (Все метки)

Здравствуйте.
Пользователей вводит минимальное кол-во матчей, которое сравнивается с данными которые в файле и выводится информация о футболисте.
Вот такой код сравнения:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (i = 0; i < n; i++){
        if (strcmp(game, a[i].game) <= 0) {
            k = 1;
            std::cout << std::setw(3) << i + 1;
            std::cout << std::setw(12) << a[i].fio;
            std::cout << std::setw(18) << a[i].team;
            std::cout << std::setw(12) << a[i].game;
            std::cout << std::setw(10) << a[i].goal;
            std::cout << std::setw(12) << a[i].pass;
            std::cout << std::setw(15) << atoi(a[i].goal) + atoi(a[i].pass);
            std::cout << std::endl;
        }
    }
game - введеное мин.кол-во
a[i].game - кол-во из файла

Если числа двухзначные, то поиск работает исправно, а вот если вводить однозначные или в файле однозначные цифры - то поиск ведёт себя неадекватно.
Как быть?
Заранее спасибо.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2015, 20:54
Ответы с готовыми решениями:

Не сравниваются строки
Сегодня мне понадобилось вызвать программу с аргументом команднйо строки я...

Две строки сравниваются некорректно
Всем доброго времени суток Помогите пожалуйста понять почему нижеприведенный...

Из заданной строки, распечатать все слова без повторений (как добавить функцию strcmp)
Из заданной строки, распечатать все слова без повторений, используя функции...

strcmp
Не могу понять, как правильно прировнять два слова. КОгда компилирую и ввожу...

Strcmp
Пользуюсь Visual Studio 2013. Читай книжку, выполняю примеры. Там есть пример с...

7
akaAxeL
66 / 66 / 59
Регистрация: 14.07.2013
Сообщений: 251
22.05.2015, 10:29 2
game и a[].game как объявлены? string\char?
0
rikimaru2013
C++ Game Dev
2472 / 1141 / 348
Регистрация: 30.11.2013
Сообщений: 3,709
22.05.2015, 10:44 3
Negative value if lhs appears before rhs in lexicographical order.
Zero if lhs and rhs compare equal.
Positive value if lhs appears after rhs in lexicographical order.
0
nik_neman
0 / 0 / 1
Регистрация: 09.07.2014
Сообщений: 59
27.05.2015, 12:42  [ТС] 4
Объявление раз:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
struct bil {
    char team[L];
    char fio[L];
    char game[L];
    char goal[L];
    char pass[L];
};
const int N = 100;
class football {
private:
    bil a[N];
    int n;
public:
    void openfile();
    void edit();
    void saving();
    void dop();
    void udalenie();
    void poiskgame();
    void sortfio();
};
Реализация поиска:
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
void football::poiskgame() //Поиск по количеству матчей
{
    int q, i, u;
    //int p=0;
    char game[L];
    openfile();
    cout << ("\nВведите минимальное количество проведенных матчей:");
    std::cout << str;
    do {
        k = 1;
        std::cin >> game;
        q = strlen(game);
        for (u = 0; u < q; u++) {
            Check(game[u]);
        }
        if (k == 0) {
            cout << ("Неверный ввод. Введите число");
            std::cout << str << std::endl;
        }
    } while (k == 0);
    system("CLS");
    cout << ("№");
    std::cout << std::setw(3) << str;
    std::cout << ("Фамилия");
    std::cout << std::setw(12) << str;
    std::cout << ("Команда");
    std::cout << std::setw(10) << str;
    std::cout << ("Матчи");
    std::cout << std::setw(8) << str;
    std::cout << ("Голы");
    std::cout << std::setw(8) << str;
    std::cout << ("Передачи");
    std::cout << std::setw(7) << str;
    std::cout << ("Г+П\n\n");
    std::cout << std::setw(7) << str;
    std::cout << std::endl;
    k = 0;
    for (i = 0; i < n; i++){
        if (strcmp(game, a[i].game) <= 0) {
            k = 1;
            std::cout << std::setw(3) << i + 1;
            std::cout << std::setw(12) << a[i].fio;
            std::cout << std::setw(18) << a[i].team;
            std::cout << std::setw(12) << a[i].game;
            std::cout << std::setw(10) << a[i].goal;
            std::cout << std::setw(12) << a[i].pass;
            std::cout << std::setw(15) << atoi(a[i].goal) + atoi(a[i].pass);
            std::cout << std::endl;
        }
    }
    if (!k) {
        cout << (" \n\n     Поиск не дал результатов.\n");
        std::cout << str;
    }
    system("PAUSE");
    system("CLS");
}
0
XZentus
201 / 199 / 65
Регистрация: 06.10.2013
Сообщений: 552
27.05.2015, 12:47 5
strcmp(game, a[i].game) <= 0 - тут у вас стравниваются строки символов, а не числа, так что сравнение некорректно.
0
nik_neman
0 / 0 / 1
Регистрация: 09.07.2014
Сообщений: 59
28.05.2015, 12:28  [ТС] 6
Становится немного понятным.
А как сравнить в таком случае как у меня?
0
XZentus
201 / 199 / 65
Регистрация: 06.10.2013
Сообщений: 552
28.05.2015, 12:31 7
Лучший ответ Сообщение было отмечено nik_neman как решение

Решение

Приводить их к одному числовому типу и сравнивать уже числа. Смотрите функции вроде atoi(), strto...().
1
nmcf
6277 / 5578 / 2539
Регистрация: 14.04.2014
Сообщений: 23,470
28.05.2015, 14:02 8
Почему просто не сделать game числовым полем? Зачем там строка?
1
28.05.2015, 14:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2015, 14:02

strcmp()
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;cstdio&gt; #include &lt;cstring&gt;...

strcmp
slovo={'d','d','d'}; char *slovo2=new char; for(int i=0;i&lt;k;i++) {...

STRCMP
Как работает функция strcmp? strncmp? ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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