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

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

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

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

21.08.2013, 12:06. Просмотров 454. Ответов 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
Посмотрите здесь:

Ошибка при сравнении типа 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(), почему то удаляется первая буква в...

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

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

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

Не срабатывает условие. Почему? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int _tmain(int argc, _TCHAR* argv) { ...

Не срабатывает условие while (!file.eof() - C++
Есть функция, которая считает из файла числа в динамический массив: int* ReadFile(string FileName) { ifstream file; ...

Не срабатывает условие в цикле while не могу понять почему - C++
При решении задачки в которой необходимо сделать игру Однорукий Бандит, наткнулся при тестировании что одно из условий цикла while не...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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Эксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
21.08.2013, 12:12     Не срабатывает условие при сравнении строк типа string #4
Цитата Сообщение от Delvox Посмотреть сообщение
Какой оператор?
==
C++
1
mdfile == md
alsav22
5416 / 4812 / 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
Ответ Создать тему
Опции темы

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