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

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

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

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

21.08.2013, 12:06. Просмотров 459. Ответов 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++):

Ошибка при сравнении типа char - C++
#include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; using namespace std; int main(int argc, char...

Зацикливание при сравнении строк - C++
Добрый вечер. У меня возникла проблема при сравнивании строк, после сравнивания происходит расчет по циклу и далее по идее должно...

Проблемы с кодировкой при сравнении строк - C++
Здравствуйте! Мне, нужно сравнить две строки: одну получаю get запросом(на сайте кодировка windows 1251), а вторая указывается...

Инициализировать массив строк типа std::string - C++
Есть массив из строк, надо присвоить ему значения. Возникла странная проблема. Вот код: string StrName; i = 1; while ( i...

Присвоить переменной типа string сумму двух других строк - C++
Как это вооплотить? Почему при таком подходе просто зависание String a=&quot;Номер группы - &quot;; String c; Cin&gt;&gt;c; String x={a,c}; ...

Как создать и заполнить динамический массив строк типа std::string? - C++
Как создать и заполнить динамический массив строк типа string? Если заполнять массивы через getline(), почему то удаляется первая буква в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Wolkodav
603 / 456 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
21.08.2013, 12:09 #2
Delvox, а опреатор сравнения для string отменили?
Delvox
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
21.08.2013, 12:10  [ТС] #3
Цитата Сообщение от Wolkodav Посмотреть сообщение
Delvox, а опреатор сравнения для string отменили?
Какой оператор?
Croessmah
Модератор
Эксперт CЭксперт С++
13133 / 7396 / 828
Регистрация: 27.09.2012
Сообщений: 18,227
Записей в блоге: 3
Завершенные тесты: 1
21.08.2013, 12:12 #4
Цитата Сообщение от Delvox Посмотреть сообщение
Какой оператор?
==
C++
1
mdfile == md
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.08.2013, 12:34 #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  [ТС] #6
Нашел ошибку, md5.digestFile возвращал значение в нижнем регистре, а я его сравнивал со значение в верхнем регистре
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2013, 07:39
Привет! Вот еще темы с ответами:

Считывание строк с клавиатуры без учёта разделителей в переменные типа std::string - C++
Подскажите, есть какой способ считывать значения с клавиатуры без учёта разделитей в переменные типа std::string?

Возможно ли присвоить переменной типа string префикс 'L' при выводе - C++
Возможно ли присвоить переменной типа string префикс 'L' при выводе? Если да, то как. Проблема в том, что слово хранящееся в переменной...

Избыточный перенос на новую строку при отображении значения типа string - C++
Когда ввожу проиpвольное значение в терминал, к примеру: asdsad dfadf. То программа выдает ответ: Output: asdsad dfadf. Т.е...

Не срабатывает условие - C++
Почему то не выводить строку printf(&quot;TOPOLOGY_NEXT_TEST\n&quot;); . В чем ошибка? if (TOPOLOGY_NEXT_TEST) { ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.08.2013, 07:39
Ответ Создать тему
Опции темы

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