【问题标题】:C - ignoring whitespace with sscanfC - 使用 sscanf 忽略空格
【发布时间】:2023-03-17 02:11:01
【问题描述】:

我一直在尝试解决这个问题,并且我有一些解决方法,但我只是想检查一下我没有遗漏一些明显的东西。基本上,我有一系列遵循某些规则的命令。任何包含数字、ASCII 字母或某些符号的内容都是标记,而 、|、&&、; 等是分隔符。我需要能够分辨出我刚刚找到哪一个并将它们存储在一个数组中。

所以在一个while循环中我有

a = sscanf (cp, "%[0-9a-zA-Z!@:/-.,^+% ]", str);

我已将空格作为要查找的符号之一,因为我想不出任何其他方式。相反,在我得到这个词(加上可能的空格)之后,我打电话

 delimiters[] = " ";
 token = strtok(str, delimiters);

哪个应该删除空格,只留下一个标记(如果没有空格,它不会改变单词)。我只是好奇是否有办法用 sscanf 做类似的事情,因为我知道如果它们之间有空格,它已经分解了字符串,但是如果你再次调用它并且它看到空格,它只是不读取任何东西。

如果没有,那也没关系。整天都在烦我。

【问题讨论】:

标签: c parsing strtok scanf


【解决方案1】:

您可以将格式更改为

a = sscanf (cp, " %[0-9a-zA-Z!@:/-.,^+%]", str);

格式中的前导 ' ' 会跳过 [可能为空的] 空白字符序列,然后您将扫描一系列非空格可接受的标记字符。

【讨论】:

  • 但这不意味着我的字符串之前必须有一个空格吗?因此,即使标记和分隔符之间碰巧没有空格,那仍然有效吗? (对不起,我会检查自己,但我现在在手机上)
  • @user1777900 这意味着如果存在,则跳过字符串之前的任何空格。
  • @user1777900 格式字符串中的空格占用的空格序列可能为空。如果没有空格,则 psace 匹配一个空的空格标记序列。
猜你喜欢
  • 2016-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
相关资源
最近更新 更多