Using stringstream inside a loop to extract a number from few strings
我目前正在使用StringStreams从字符串中提取值。在这个简单的代码中,用户输入一个名称和一个数字(用空格分隔),这个字符串存储在"input"中。然后,它被传递到"stream"并将名称和编号分开,这些名称和编号存储在"name"和"number"中。然后,用STD::CUT输出数字。这个过程用不同的名称和数字进行了几次。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <sstream> #include <iostream> int main() { std::string input; std::stringstream stream; std::string name; double amount; for (;;) { std::getline(std::cin, input); // enter a name, a whitespace and a number stream.str(input); stream >> name >> amount; // problem here std::cout << amount << std::endl; } return 0; } |
问题:只有第一个输入的数字存储在"Amount"中。下一个输入的数字不会存储在"amount"中(amount中的数字始终相同)。也许,有一些我不知道的关于溪流…
问题是当调用
修复它的最佳方法是在循环中移动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <sstream> #include <iostream> int main() { std::string input; std::string name; double amount; while (std::getline(std::cin, input)) { std::stringstream stream(input); stream >> name >> amount; std::cout << amount <<"" << name << std::endl; } return 0; } |
这是它工作的证据。实际上,最好在循环中移动更多的变量。
Problem: Only the number of the first entered input is stored in
"amount". The numbers of the next inputs will not be stored in
"amount" (amount always has the same number inside). Maybe, there is
something I don't know about stringstreams...
对。使用一次后,您忘记重置
为此,需要使用
也就是说,结束你的
1 2 3 4 5 6 7 8 9 10 11 12 13 | int main() { .... .... for (;;) { ... ... stream.str( std::string() ); // or stream.str(""); stream.clear(); } return 0; } |
尝试使用输入字符串流
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <sstream> #include <iostream> int main() { std::string input; std::istringstream stream; // Note the extra i std::string name; double amount; for (;;) { std::getline(std::cin, input); stream.str(input); stream >> name >> amount; std::cout << amount << std::endl; } return 0; } |
Input: Hello 3.14
Output: 3.14
Input: World 2.71
Output: 2.71