C++字符串解析思路

Sco*_*ott 6 c++ string parsing

我有另一个程序的输出,这个程序更像是人类可读而不是机器可读,但我还是打算解析它.这没什么太复杂的.

然而,我想知道在C++中最好的方法是什么.这更像是一种"一般惯例"类型的问题.

我查看了Boost.Spirit,甚至让它工作了一下.那东西太疯狂了!如果正在设计我正在阅读的语言,它可能是适合这项工作的工具.但实际上,考虑到它的极端编译时间,当我做错任何事情时,g ++会出现几页错误,这不是我需要的.(我也不太需要运行时性能.)

考虑使用C++运算符<<,但这似乎毫无价值.如果我的文件中有"John有5个小部件"这样的行,而其他人"Mary在459 Ramsy street工作",我怎么能确保我的程序中有第一个类型的行,而不是第二个类型?我必须阅读整行,然后使用类似的东西string::find,string::substr我想.

那就离开了sscanf.它会很好地处理上述情况

if( sscanf( str, "%s has %d widgets", chararr, & intvar ) == 2 )
      // then I know I matched "foo has bar" type of string, 
      // and I now have the parameters too
Run Code Online (Sandbox Code Playgroud)

所以我只是想知道我是否遗漏了某些内容,或者C++是否真的没有太多的内置替代品.

Mar*_*ett 0

我想总是有 strtok()