Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Delvox
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
#1

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

21.08.2013, 12:06. Просмотров 553. Ответов 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";
Т.е. как я понял результат где-то кэшируется, и условие не всегда срабатывает, как это решить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2013, 12:06
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Не срабатывает условие при сравнении строк типа string (C++):

Условие типа if( масив типа char[x] [y] != переменная типа char) не срабатывает
Создал функцию ChangeWay(). Все, кроме if(map !=ar) (обе переменные типа...

Ошибка при сравнении типа char
#include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt;...

Зацикливание при сравнении строк
Добрый вечер. У меня возникла проблема при сравнивании строк, после сравнивания...

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

Инициализировать массив строк типа std::string
Есть массив из строк, надо присвоить ему значения. Возникла странная проблема....

Присвоение объекту типа string рандомный элемент из массива типа string
Добрый вечер, дорогие форумчане. Я столкнулся с проблемой. Как присвоить...

5
Wolkodav
609 / 462 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
21.08.2013, 12:09 #2
Delvox, а опреатор сравнения для string отменили?
0
Delvox
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
21.08.2013, 12:10  [ТС] #3
Цитата Сообщение от Wolkodav Посмотреть сообщение
Delvox, а опреатор сравнения для string отменили?
Какой оператор?
0
Croessmah
++Ͻ
14146 / 8071 / 1512
Регистрация: 27.09.2012
Сообщений: 19,905
Записей в блоге: 3
Завершенные тесты: 1
21.08.2013, 12:12 #4
Цитата Сообщение от Delvox Посмотреть сообщение
Какой оператор?
==
C++
1
mdfile == md
0
alsav22
5438 / 4833 / 831
Регистрация: 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"). Как видите это значение?
0
Delvox
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
22.08.2013, 07:39  [ТС] #6
Нашел ошибку, md5.digestFile возвращал значение в нижнем регистре, а я его сравнивал со значение в верхнем регистре
0
22.08.2013, 07:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2013, 07:39
Привет! Вот еще темы с решениями:

Присвоить переменной типа string сумму двух других строк
Как это вооплотить? Почему при таком подходе просто зависание String a=&quot;Номер...

Как создать и заполнить динамический массив строк типа std::string?
Как создать и заполнить динамический массив строк типа string? Если заполнять...

Правила свертывания ссылок не срабатывает при выводе типа T
Когда мы передаем в функцию параметр тип которого шаблонный T&amp;&amp;, то по идее...

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


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

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

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