使用fscanf或等效扫描字符串

时间:2015-12-30 21:05:53

标签: c++ file stream scanf

我已经有一个"复杂的"程序,所以我想尽可能使用以下代码:

const char* path = filename.c_str();
FILE * file = fopen(path, "r");
if( file == NULL ) {
   printf("Obj File was not found");
   return 0;
} else {
   std::ifstream input(path);
   std::string line;
   while( std::getline( input, line ) ) {
      string sub;
      iss >> sub;
      // here i read in a lot of lines which are in sub
   }
}

现在我需要分开这样的一行:

f 2/3/1 3/4/1 4/6/1

并发现fscanf应该像

一样工作
fscanf(file, "%d/%d/%d %d/%d/%d %d/%d/%d\n", &a, &b, &c, &d, &e, &f, &g, &h, &i);

但"文件"必须是一个文件。如何在fscanf中输入一个字符串(在这种情况下为sub),或者是否有另一个简单的解决方案来尽可能短地读取该行。

1 个答案:

答案 0 :(得分:1)

你想要sscanf()函数。

sscanf(sub, "%d/%d/%d %d/%d/%d %d/%d/%d\n", &a, &b, &c, &d, &e, &f, &g, &h, &i);