C++ 格式化输入:如何“跳过” 代币?
假设我有一个这种格式的输入文件:
VAL1 VAL2 VAL3
VAL1 VAL2 VAL3
我正在编写一个仅对 VAL1 和 VAL3 感兴趣的程序。 在 C 中,如果我想“跳过”第二个值,我会执行以下操作:
char VAL1[LENGTH]; char VAL3[LENGTH];
FILE * input_file;
fscanf(input_file, "%s %*s %s", VAL1, VAL3);
意思是,我将使用“%*s”格式化程序使 fscanf() 读取此标记并跳过它。 如何使用 C++ 的 cin 执行此操作? 有类似的命令吗? 或者我必须读取虚拟变量吗?
提前致谢。
Suppose I have an input file in this format:
VAL1 VAL2 VAL3
VAL1 VAL2 VAL3
I'm writing a program that would be interested only in VAL1 and VAL3. In C, if i wanted to 'skip' the second value, I'd do as follows:
char VAL1[LENGTH]; char VAL3[LENGTH];
FILE * input_file;
fscanf(input_file, "%s %*s %s", VAL1, VAL3);
Meaning, I'd use the "%*s" formatter to make fscanf() read this token and skip it. How do I do this with C++'s cin? Is there a similar command? Or do I have to read to a dummy variable?
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
C++ 字符串工具包库 (StrTk) 为您的问题提供了以下解决方案:
更多示例请参见< a href="http://www.codeproject.com/KB/recipes/Tokenizer.aspx">此处
The C++ String Toolkit Library (StrTk) has the following solution to your problem:
More examples can be found Here
有一个
ignore
函数可用:第一个参数定义要跳过的字符数,第二个参数是停止跳过的分隔符。
您可以将其包装在用户定义的操纵器中,因为它很难看。
这是自定义操纵器:
您可以像这样使用它:
(ps - 我没有编译这个,所以可能有错字)。
There's an
ignore
function available:The first argument defines the number of characters to skip, the second parameter is the delimiter to stop skipping at.
You could wrap that up in a user-defined manipulator, since it's ugly.
Here's the custom manipulator:
And you could use that like this:
(ps -- I didn't compile this, so there maybe a typo).
您可以使用 getline() 以更简单的方式完成此操作。 只需使用它来获取整行,然后解析出标记之间的值(使用 strtok?)
getline() 还有很多其他问题,但它应该可以解决您的问题。
You can do it in a much easier way with getline(). Just use it to grab the entire line, and then parse out the values in between the tokens (use strtok?)
There are a whole bunch of other issues with getline(), but it should work for your problem.
我只是将其读入虚拟变量。 如果您最终确实需要它,它将可用。
I would just read it into a dummy variable. If you do need it eventually, it will be available.
您可以使用
这将忽略最多 256 个字符或空格的所有内容。
编辑(格式和...):您可以这样做的替代方案:
You can use
This will ignore everything up to either 256 characters or a white space.
Edit (formatting and...): alternatives you can do: