Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 1
Регистрация: 09.07.2014
Сообщений: 59
1

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Пользователей вводит минимальное кол-во матчей, которое сравнивается с данными которые в файле и выводится информация о футболисте.
Вот такой код сравнения:
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)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.05.2015, 20:54
Ответы с готовыми решениями:

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

Не сравниваются строки через Contains
Допустим, что у меня есть два строковых массива. В одном массиве целое предложение. (&quot;Василий Пупкин приехал в огород&quot;), в другом...

Не сравниваются строки
Подскажите, как ввод с клавиатуры сравнить с &quot;zzz&quot; и выйти из цикла не хочет сравнивать string name и a? import java.util.Scanner; ...

7
68 / 67 / 59
Регистрация: 14.07.2013
Сообщений: 251
22.05.2015, 10:29 2
game и a[].game как объявлены? string\char?
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
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
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
202 / 200 / 65
Регистрация: 06.10.2013
Сообщений: 552
27.05.2015, 12:47 5
strcmp(game, a[i].game) <= 0 - тут у вас стравниваются строки символов, а не числа, так что сравнение некорректно.
0
0 / 0 / 1
Регистрация: 09.07.2014
Сообщений: 59
28.05.2015, 12:28  [ТС] 6
Становится немного понятным.
А как сравнить в таком случае как у меня?
0
202 / 200 / 65
Регистрация: 06.10.2013
Сообщений: 552
28.05.2015, 12:31 7
Лучший ответ Сообщение было отмечено nik_neman как решение

Решение

Приводить их к одному числовому типу и сравнивать уже числа. Смотрите функции вроде atoi(), strto...().
1
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
28.05.2015, 14:02 8
Почему просто не сделать game числовым полем? Зачем там строка?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.05.2015, 14:02
Помогаю со студенческими работами здесь

Не сравниваются строки
И снова здраствуйте форумчане, все считывается отлично, все заносится прекрасно, но в последнем ифе не сравниваются строки, цикл просто...

Не сравниваются строки массива
#include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; struct list { int regnumb; int visits; ...

Неправильно сравниваются строки
Собственно, есть две строки, полученные из инпутов. В инпутах содержатся условные пароли - символы, цифры, буквы. У обоих gettype...

Не сравниваются равные строки
char buf = new char; try { ...

Неправильно сравниваются строки
Есть две строки, 1 строка получена из инпута, вторая получена из файла test.php таким образом: file_get_contents('test.php'); Данные...


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Создание и использование компонентов в Vue 3
Reangularity 14.03.2025
Компонент в Vue - это автономный блок интерфейса, который содержит собственную разметку, логику и стили. Представьте себе кнопку, форму ввода или даже целую панель навигации - всё это можно оформить. . .
Vue 3: Создаем современное веб-приложение с Composition API
Reangularity 14.03.2025
В фронтенд-разработке Vue 3 выделяется своим прагматичным подходом. В отличие от React с его минималистичной философией "всё — JavaScript" или Angular с его всеобъемлющим корпоративным подходом, Vue. . .
Разработка контекстных меню в iOS
mobDevWorks 14.03.2025
С приходом iOS 13 Apple представила новый API для контекстных меню, который полностью заменил предыдущую технологию 3D Touch peek & pop. Хотя многие разработчики и пользователи испытывают ностальгию. . .
Лучшие практики оптимизации Docker Image
Mr. Docker 13.03.2025
Размер Docker-образа влияет на множество аспектов работы с контейнерами. Чем больше образ, тем дольше его загрузка в реестр и выгрузка из него. Для команд разработки, работающих с CI/ CD пайплайнами,. . .
Вопросы на собеседовании по Docker
Mr. Docker 13.03.2025
Ты сидишь напротив технического специалиста, и вдруг звучит вопрос про Docker Swarm или многоэтапные сборки. Пот на лбу? Не переживай, после этой статьи ты будешь готов ко всему! Эта статья будет. . .
Поиск текста в сносках : замена дефиса на тире или тире на дефис...
РоΜа 13.03.2025
Нужно было найти текст в сносках и заменить. Почему-то метод селекшн не сработал. . . пришлось гуглить. найденный на форумвба код пришлось править. Смысл - заменяет в сносках дефисы и тире на нужные. . . .
Real PATH definitions in bash scripts
jigi33 13.03.2025
Как поймать путь и путь к директории относительно запускаемого файла в BASH 1. поймать путь через вывод $(pwd) 2. более правильно - на основе realpath (см. скриншот)
Django или Flask: что выбрать для веб-разработки на Python
py-thonny 13.03.2025
Django – это высокоуровневый фреймворк, который придерживается философии "всё включено". Он предоставляет разработчику готовые решения для большинства типичных задач веб-разработки: от аутентификации. . .
Непрерывное развертывание в Java с Kubernetes
Javaican 13.03.2025
Чем так привлекателен Kubernetes для развертывания Java-приложений? Этот оркестратор контейнеров позволяет автоматизировать развертывание, масштабирование и управление контейнеризированными. . .
Предотвращение XSS, CSRF и SQL-инъекций в JavaScript
run.dev 13.03.2025
JavaScript занимает первые позиции среди языков веб-разработки, но его распространенность делает его привлекательной целью для злоумышленников. Межсайтовый скриптинг (XSS), межсайтовая подделка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер