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

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

Войти
Регистрация
Восстановить пароль
 
Delvox
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
#1

Не срабатывает условие при сравнении строк типа string - C++

21.08.2013, 12:06. Просмотров 439. Ответов 5
Метки нет (Все метки)

Здравствуйте! Не срабатывает условие if() при сравнении двух строк типа string, использую функцию strcmp()
Т.е. если выполнится этот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "md5.h"
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
MD5 md5 ;
string mdfile = md5.digestFile( "C:\\Windows\\notepad.exe" );
 string md = "777";
 //cout << ( (mdfile == md) ? "Good" : "Bad") << endl;
 if((strcmp(mdfile.c_str(), md.c_str())) == NULL)
     cout << "Good" << endl;
 else 
     cout << "Bad" << endl;
 
 system ("pause");
  return 0;
}
Результат будет "Bad"
То если потом изменить значение строки md на верное т.е. на "F2C7BB8ACC97F92E987A2D4087D021B1"
Все равно результат будет "Bad";
Т.е. как я понял результат где-то кэшируется, и условие не всегда срабатывает, как это решить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2013, 12:06     Не срабатывает условие при сравнении строк типа string
Посмотрите здесь:

C++ Не срабатывает условие. Почему?
C++ Проблемы с кодировкой при сравнении строк
C++ Здравствуйте! Создал класс std::string. Не создается объкт типа string... Подскажите в чем причина?
C++ Считывание строк с клавиатуры без учёта разделителей в переменные типа std::string
Зацикливание при сравнении строк C++
C++ Запись информации из вектора типа string в вектор типа double
Ошибка при сравнении типа char C++
Не срабатывает условие while (!file.eof() C++
C++ Возможно ли присвоить переменной типа string префикс 'L' при выводе
C++ Инициализировать массив строк типа std::string
Как создать и заполнить динамический массив строк типа std::string? C++
Избыточный перенос на новую строку при отображении значения типа string C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wolkodav
601 / 454 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
21.08.2013, 12:09     Не срабатывает условие при сравнении строк типа string #2
Delvox, а опреатор сравнения для string отменили?
Delvox
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
21.08.2013, 12:10  [ТС]     Не срабатывает условие при сравнении строк типа string #3
Цитата Сообщение от Wolkodav Посмотреть сообщение
Delvox, а опреатор сравнения для string отменили?
Какой оператор?
Croessmah
Модератор
Эксперт CЭксперт С++
12675 / 7183 / 801
Регистрация: 27.09.2012
Сообщений: 17,709
Записей в блоге: 2
Завершенные тесты: 1
21.08.2013, 12:12     Не срабатывает условие при сравнении строк типа string #4
Цитата Сообщение от Delvox Посмотреть сообщение
Какой оператор?
==
C++
1
mdfile == md
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.08.2013, 12:34     Не срабатывает условие при сравнении строк типа string #5
Цитата Сообщение от Wolkodav Посмотреть сообщение
Delvox, а опреатор сравнения для string отменили?
Это ТС пробовал (12 строка). У него вопрос о другом:
Цитата Сообщение от Delvox Посмотреть сообщение
Не срабатывает условие if() при сравнении двух строк типа string, использую функцию strcmp()
Добавлено через 5 минут
Delvox, если изменить код так, то всё нормально работает.
C++
1
2
3
4
5
6
7
8
9
10
string mdfile = "777";//md5.digestFile( "C:\\Windows\\notepad.exe" );
 string md = "777";
 //cout << ( (mdfile == md) ? "Good" : "Bad") << endl;
 if((strcmp(mdfile.c_str(), md.c_str())) == NULL)
     cout << "Good" << endl;
 else 
     cout << "Bad" << endl;
 
 system ("pause");
  return 0;
Цитата Сообщение от Delvox Посмотреть сообщение
То если потом изменить значение строки md на верное т.е. на "F2C7BB8ACC97F92E987A2D4087D021B1"
Делайте выводы. Значит то, что возвращает md5.digestFile, не равно тому, что вы присваиваете md ("F2C7BB8ACC97F92E987A2D4087D021B1"). Как видите это значение?
Delvox
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
22.08.2013, 07:39  [ТС]     Не срабатывает условие при сравнении строк типа string #6
Нашел ошибку, md5.digestFile возвращал значение в нижнем регистре, а я его сравнивал со значение в верхнем регистре
Yandex
Объявления
22.08.2013, 07:39     Не срабатывает условие при сравнении строк типа string
Ответ Создать тему
Опции темы

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