ввод std :: cin не совпадает с прямым назначением переменной std :: string - PullRequest
0 голосов
/ 13 декабря 2011

У меня любопытная проблема, если я назначаю переменную через std::cin, она отличается от прямого назначения переменной. Строка примера I отличается от строки примера II.

Я использую функцию расшифровки xor для расшифровки зашифрованного текста.
Если переменная назначена через std::cin, я получаю правильный вывод (Пример1). Но если я назначу переменную непосредственно со строкой зашифрованного текста, я получу другой вывод (Пример 2).

Чем отличается присвоение с std::cin от прямого присвоения переменной?

Пример I: (std :: cin)

std::string my_input;
std::cin >> my_input;

ВХОД: 89001c110704918484dcdcdc85df9b9d8a2310005c08dccad8d7cccec3df824555a6dfced8df0045550 ВЫХОД: http://www.test.de/|was|geht|½½½½½½½½¯

Пример II: (прямое присвоение переменной)

std::string my_input;
my_input = "89001c110704918484dcdcdc85df9b9d8a2310005c08dccad8d7cccec3df824555a6dfced8df0045550";

ВЫХОД: тест ■ ½½www.test =¯¯óµ "$ & ┌ © ½░½) ¯ ■

Если я получу только одну строку, вывод будет таким же, как прямое присвоение переменной. Но почему?

std::string my_input;
std::getline(std::cin, my_input);

INPUT: 89001c110704918484dcdcdc85df9b9d8a2310005c08dccad8d7cccec3df824555a6dfced8df0045550 ВЫХОД: тест ■ ½½www.test =¯¯óµ "$ & ┌ © ½░½) ¯ ■

Ответы [ 2 ]

0 голосов
/ 13 декабря 2011

Предполагая, что входная строка не содержит пробелов (что может привести к возврату std::cin >> my_input до использования всей строки), результат должен быть идентичным. Вместо того, чтобы сравнивать результат после расшифровки текста, вы можете сравнить две строки, содержащие зашифрованный текст, например:

std::string direct_assign;
local = "89001c110704918484dcdcdc85df9b9d8a2310005c08dccad8d7cccec3df824555a6dfced8df0045550";

std::string input;
std::cin >> input;

std::cout << (direct_assign == input) << std::endl;

Предполагая, что результирующие строки равны, нет причин, по которым они должны вести себя по-разному при расшифровке (если только в функции дешифрования или в том, как она вызывается, произошла ошибка).

0 голосов
/ 13 декабря 2011

Просто предположение, в чем проблема. (Вопрос требует более подробной информации.)

Замените код примера I следующим:

std::string my_input;
std::getline(std::cin, my_input);

Что происходит сейчас?

...