-4

我有一个输入字符串,我需要对其进行解析以获取 4 到 16 个变量。使用 sscanf 我可以获得前几个变量,但其余的显示为 0。我需要做什么才能获得其余的?

行格式:COMMAND [1 - 16 个浮点变量,以空格分隔]

该行来自使用以下内容的文件:

fgets(行,20,文件);

sscanf(line, "%s", 参数);

字符串parString(参数);

if(parString == "NEAR"){

      sscanf(line, "%s %f", param, &np);
      printf("%s %f\n", param, np);

}...

根据该行中的第一个单词,我知道在这种情况下我需要读取多少个变量。

4

2 回答 2

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

于 2012-11-06T18:46:13.583 回答
1

使用 a 会更好地完成此任务,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;
}

反正是这样的。我相信你明白了。

于 2012-11-06T18:39:18.433 回答