我的输入格式:
192,21,4 33,2,1 23,7,61
我只想获得数字。
#include <iostream>
#include <string>
#include <sstream>
#include <cmath>
using namespace std;
int strtoint(const std::string str){ //converting the string to integer
float a = str.length();
int result = 0;
for(int i=1; i<=str.length(); i++){
result+=(str[i-1]-'0')*pow(10,(a-1));
a--;
}
return result;
}
int main ()
{
string name;
string segment;
while(getline (cin,name, ' ')){
stringstream test(name);
while(getline(test, segment, ','))
{
cout << segment <<" "<<strtoint(segment)<<endl;
}
}
return 0;
}
我没有获得最后一个(61)。所以输出是192 21 4 33 2 1 23 7。
我如何获得所有数字?
答案 0 :(得分:1)
我不知道为什么你的实现不适用于你提供的输入 - Derek在评论中表明应该有效。它理解错误的任何额外字符都会被程序解释为数字,所以如果有一些隐藏的输入(制表符,换行符,点而不是逗号等),它应该输出垃圾而不是61,而不是什么。
我会使用其他方法来分割字符串,而不是使用getline。主要是因为getline意味着它读取整行,因此其他人很难理解你实际做了什么。请参阅此主题以了解如何拆分字符串:Split a string in C++?
解析数字时,一旦遇到意外字符(例如“a”),就会遇到问题。有更好,更简单的方法来解析数字:How to parse a string to an int in C++?
答案 1 :(得分:1)
怎么样:
int main()
{
std::string input = "192,21,4 33,2,1 23,7,61";
std::stringstream lineStream(input);
std::vector<int> numbers;
std::string number;
while (std::getline(lineStream, number, ','))
{
numbers.push_back(atoi(number.c_str()));
}
for (int n : numbers)
{
std::cout << n << " ";
}
}
答案 2 :(得分:0)
如果您在61之后没有输入空格(&#34;&#34;),则getline将不会返回,因此永远不会打印61.收到换行符后它不会返回(&#34; \ n&# 34;)如果你指定一个分隔符。