输入一行数据,格式为“整数,逗号,整数,逗号”,长度未知,整数个数未知,将所有的整数读取到一个vector中
1. 利用istringstream格式化读取字符串
#include <iostream>
#include <sstream>
int main()
{
std::string input;
getline(std::cin, input);
std::istringstream is(input);
int integer = 0;
char ch = 0;
std::vector<int> ivec;
while (is >> integer)
{
ivec.push_back(integer);
is >> ch;
}
}
#include <cstdio>
int main()
{
char s[100];
char *p = NULL;
gets(s);
p = s;
int count = 0, n = 0;
int integer = 0;
while (1)
{
count = sscanf(p, "%d%n", &integer, &n);
if (count == 1)
{
src.push_back(integer);
p += n;
}
else if (count == 0)
{
++p;
}
else
break;
}
}
注释:sscanf格式化读取字符串,返回成功读取的数据个数,如果读取错误(例如溢出)返回-1, %n表示把当前读取的字符个数赋给相应的参数变量。利用返回值判断读取是否成功(是否是合法的整数,不是则从下一个字符读取)或者是否到达字符串的末尾,利用%n设置下一次读取的起始位置。感谢优快云的赵四老师!