我正在尝试用数字读取一行字符串字符(例如" 30 40 50 20")并将它们放入向量中。我还需要避免空格和换行符。但是当我阅读输入时,它没有看到字符串" 30"它会看到字符" 3"和" 4"。
void Input() {
getline(cin,line, '\n');
for (int i = 0; i < line.length(); i++) {
if (! (isspace(line[i]))) {
cout << line[i] << ", ";
scores.push_back(line[i]);//(atoi(input));
}
}
cout << scores.size() << "! ";
}
像&#34; 30 40 50&#34;不会给出矢量大小为3,它的大小为6。 解决这个问题的最佳方法是什么?
编辑:我应该在原始消息中澄清这是一个挑战,我无法在原始案例中包含字符串流库。
答案 0 :(得分:2)
我认为你在解析前抓取整行是正确的做法,否则你会陷入困境。但你实际上必须做一些解析。现在你只是拔出个别角色。
以下内容并非最佳,但它会让您开始使用 - 继续使用格式化的流提取,但是从文件中隔离到此行。
所以:
void Input()
{
getline(cin, line, '\n');
istringstream ss(line);
int val;
while (ss >> val)
scores.push_back(val);
cout << scores.size() << "! ";
}
答案 1 :(得分:1)
读取该行并输入std::istringstream
,然后读作&#34;通常&#34;使用字符串流中的>>
运算符。
答案 2 :(得分:1)
将该行放入std::istringstream
并从中提取数字是最好的方法。
以下是使用标准库的手动循环的替代方法:
std::istringstream numbers(line);
std::copy(std::istream_iterator<int>(numbers),
std::istream_iterator<int>(),
std::back_inserter(scores));
答案 3 :(得分:0)
最好利用输入字符串组合,例如:http://www.cplusplus.com/reference/sstream/stringstream/stringstream/。
提取运算符允许您将数据从流解析为数据类型T的某个变量。输入字符串流的另一个优点是能够查询传递是否成功,并且在您的情况下通过设置skipws格式标志来忽略空格字符
示例:
int main () {
std::istringstream ss("30 40 50");
float val = 0.0f;
while( ss >> std::skipws >> val )
{
std::cout << val << "\n";
}
return 0;
}
出:30 40 50