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

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

Восстановить пароль Регистрация
 
Delvox
 Аватар для Delvox
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
21.08.2013, 12:06     Не срабатывает условие при сравнении строк типа string #1
Здравствуйте! Не срабатывает условие 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
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
21.08.2013, 12:09     Не срабатывает условие при сравнении строк типа string #2
Delvox, а опреатор сравнения для string отменили?
Delvox
 Аватар для Delvox
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
21.08.2013, 12:10  [ТС]     Не срабатывает условие при сравнении строк типа string #3
Цитата Сообщение от Wolkodav Посмотреть сообщение
Delvox, а опреатор сравнения для string отменили?
Какой оператор?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12080 / 6941 / 782
Регистрация: 27.09.2012
Сообщений: 17,227
Записей в блоге: 2
Завершенные тесты: 1
21.08.2013, 12:12     Не срабатывает условие при сравнении строк типа string #4
Цитата Сообщение от Delvox Посмотреть сообщение
Какой оператор?
==
C++
1
mdfile == md
alsav22
5284 / 4803 / 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
 Аватар для Delvox
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
22.08.2013, 07:39  [ТС]     Не срабатывает условие при сравнении строк типа string #6
Нашел ошибку, md5.digestFile возвращал значение в нижнем регистре, а я его сравнивал со значение в верхнем регистре
Yandex
Объявления
22.08.2013, 07:39     Не срабатывает условие при сравнении строк типа string
Ответ Создать тему
Опции темы

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