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的向量中
有一个更好的方法吗?
谢谢
这是一项任务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无论如何都会跳过前导空格.我把它们包括在内只是为了让它更具可读性.