有没有更好的方法来解析这样的文本行?

jma*_*erx 4 c++ string parsing

我有一个文本行的文本文件,其中包含一个字符串,另一个字符串后跟最多4个整数,例如:

clear "clear water.png" 5 7
wet "wet water.png" 9 5 33 17
soft "soft rain falling.png" 
Run Code Online (Sandbox Code Playgroud)

我看到的唯一方法是:

阅读直到找到空间

将字符串设置为湿

读到双引号

读到第二个双引号

将第二个字符串设置为wet water.png

而不是行尾

读到太空

把字符串放入字符串流

将结果整数推送到int的向量中

有一个更好的方法吗?

谢谢

Jer*_*fin 5

这是一项任务scanf,公司真正发挥作用.

char first_string[33], second_string[129];

sscanf(input_string, 
    "%32s%*[^\"]%*c%128[^\"]%*c %d %d %d %d", 
    first_string, 
    second_string, 
    &first_int, 
    &second_int,
    &third_int,
    &fourth_int);
Run Code Online (Sandbox Code Playgroud)

您可能希望在if语句中执行此操作,以便您可以测试返回值,告诉您转换了多少这些字段(例如,您知道最后读取了多少整数).

编辑:也许一些解释会有所帮助.让我们剖析一下:

%32s将字符串读取到第一个空格(或32个字符,以先到者为准).
%*[^ \"]忽略第一个输入".
%*c忽略输入的另一个字节(引用本身)
%128 [^ \"]读取引号中的字符串(即,直到下一个引号字符) ).
%*c忽略结束报价%d读取一个int(我们已经完成了四次).

每个之前的空间%d实际上是不必要的 - 它会跳过空格,但没有空格,%d无论如何都会跳过前导空格.我把它们包括在内只是为了让它更具可读性.