【问题标题】:std::cin input not the same as direct assign std::string variablestd::cin 输入与直接分配 std::string 变量不同
【发布时间】:2011-12-13 03:39:50
【问题描述】:

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

我使用异或解密函数来解密密文。
如果变量是通过std::cin 分配的,我会得到正确的输出(Example1)。但是如果我直接用密文字符串分配变量,我会得到不同的输出(Example2)。

std::cin 赋值和直接变量赋值有什么不同?

示例一:(std::cin)

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

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

示例二:(直接变量赋值)

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

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

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

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

输入: 89001c110704918484dcdcdc85df9b9d8a2310005c08dccad8d7cccec3df824555a6dfced8df0045550 输出:测试■½½www.test═¯¯óµ"$&┌©½░½)¯■

【问题讨论】:

  • 你能更详细地解释你的问题是什么吗?我们很乐意提供帮助,但目前尚不清楚您希望我们为您提供什么帮助。
  • 你如何确定输出不一样?向我们展示这两种情况下的输出。

标签: c++ string iostream cin


【解决方案1】:

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

将您的示例 I 代码替换为:

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

现在会发生什么?

【讨论】:

  • 是的,我以前测试过。与直接分配相同的输出。我知道。但是为什么要在直接赋值中切割变量呢?或者直接分配的结束线在哪里?
【解决方案2】:

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

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

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

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

假设生成的字符串相等,那么在解密时它们没有理由表现不同(除非解密函数或调用它的方式出错)。

【讨论】:

  • 是的,是一样的。 Thx,对于代码狙击。我认为这是包含的库的问题。在独立模式下,只有使用 en/decrypt 方法一切正常。
猜你喜欢
  • 2011-06-12
  • 1970-01-01
  • 2022-06-29
  • 1970-01-01
  • 2013-11-01
  • 2021-02-26
相关资源
最近更新 更多