我有一个输入字符串,我需要解析它以获得4到16个变量。使用sscanf我可以得到前几个变量但其余的显示为0.我需要做什么来完成其余的工作?
行格式:COMMAND [1 - 16个由空格分隔的浮点变量]
该行是使用以下内容从文件进入的:
fgets(第20行,第10行);
sscanf(line,“%s”,param);
string parString(param);
if(parString ==“NEAR”){
sscanf(line, "%s %f", param, &np);
printf("%s %f\n", param, np);
} ...
根据行中的第一个单词,我知道在这种情况下需要读取多少变量。
答案 0 :(得分:1)
使用std::istringstream
可以更好地完成此任务,因为它会记住您到目前为止所阅读的位置。所以你可以写这样的代码
#include <sstream>
std::istringstream input("SPHERE s3 -4 2 -10 2 2 1 0 0 0.5 0 0 1 0 1000");
int var1, var2, var3, var4, var5, var6;
// get first four variables
input >> var1 >> var2 >> var3 >> var4;
if (something or other)
{
// get the next two variables
input >> var5 >> var6;
}
无论如何都是这样的。我相信你明白了。
答案 1 :(得分:1)
C中的一种方法是使用strtok()。
char *p = strtok(str, " ");
while(p)
{
// Store each string
// OR convert it to integer using strtol() if an intger was expected
p = strtok(NULL, " ");
}
当没有更多值可以从str
读取时,循环将终止。