std :: cin输入与直接赋值std :: string变量不同

时间:2011-12-13 03:39:50

标签: c++ string iostream cin

如果我通过std::cin分配变量,我会遇到一个奇怪的问题,它与直接变量assign不同。示例I字符串与示例II字符串不同。

我使用xor decrypt函数来解密密文 如果通过std::cin分配变量,我会得到正确的输出(例1)。但是如果我直接用密文字符串分配变量,我将获得不同的输出(例2)。

分配std::cin和直接变量分配有什么不同?

示例I:(std :: cin)

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

INPUT: 89001c110704918484dcdcdc85df9b9d8a2310005c08dccad8d7cccec3df824555a6dfced8df0045550   输出: http://www.test.de/|was|geht|½½½½½½½½

例II :(直接变量赋值)

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

输出:测试■½½www.test═¯¯óμ“$&┌©½░½)¯■

如果我只获得一行,则输出与直接变量assign相同。但为什么呢?

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

INPUT: 89001c110704918484dcdcdc85df9b9d8a2310005c08dccad8d7cccec3df824555a6dfced8df0045550   输出:测试■½½www.test═¯¯óμ“$&┌©½░½)¯■

2 个答案:

答案 0 :(得分:0)

只是猜测问题是什么。 (这个问题需要更多细节。)

用此替换您的示例I代码:

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

现在发生了什么?

答案 1 :(得分:0)

假设输入字符串不包含任何空格(在使用整个字符串之前会导致std::cin >> my_input返回),结果应该相同。您可能希望比较包含密文的两个字符串,而不是比较解密文本后的结果,如:

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

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

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

假设结果字符串相等,则没有理由在解密时它们的行为应该不同(除非在解密函数中存在错误或如何调用它)。