使用istringstream
,我们可以从字符串中逐个读取项目,例如:
istringstream iss("1 2 3 4");
int tmp;
while (iss >> tmp) {
printf("%d \n", tmp); // output: 1 2 3 4
}
我们可以使用sscanf
吗?
答案 0 :(得分:2)
如果您可以使用strtok
将字符串分解为单独的标记 char str[] ="1 2 3 4";
char * pch;
pch = strtok (str," ");
while (pch != NULL)
{
int tmp;
sscanf( pch, "%d", &tmp );
printf( "%d \n", tmp );
pch = strtok (NULL, " ");
}
否则,scanf支持%n转换,允许您计算到目前为止消耗的字符数(我没有测试过,可能存在我未考虑的陷阱);
char str[] ="1 2 3 4";
int ofs = 0;
while ( ofs < strlen(str) )
{
int tmp, ofs2;
sscanf( &str[ofs], "%d %n", &tmp, &ofs2 );
printf( "%d \n", tmp );
ofs += ofs2;
}
答案 1 :(得分:2)
您可以使用此
非常接近地模拟它const char *s = "1 2 3 4";
int tmp, cnt;
for (const char *p = s; sscanf(p, "%d%n", &tmp, &cnt) == 1; p += cnt)
printf("%d\n", tmp);