【问题标题】:How to break a string, that was read using fgets(), using scanf("%s",..)如何打破使用 fgets() 读取的字符串,使用 scanf("%s",..)
【发布时间】:2015-05-06 14:42:54
【问题描述】:

我正在开发一个程序,该程序采用数学表达式,将其转换为 posfix 表示法,然后求解它。

首先,我正在检查表达式以查看它是否格式正确(左括号和括号与右括号匹配)。为了进行检查,我使用了fgets() 来获取字符串,因为据我所知,它会忽略空格。

现在我必须在出现空格时断开字符串,但是对于这部分,使用scanf( "%s" ,...) 的缓冲区使用 do while 会更容易

有什么方法可以让我使用 scanf 技巧来破坏字符串,逐个处理 int 而无需再次读取它?

【问题讨论】:

标签: c buffer scanf fgets


【解决方案1】:

您可以使用sscanf() 前进通过fgets() 读取的缓冲区
%n 将接收扫描使用的字符数。添加 used 到偏移量将推进扫描通过缓冲区。

int offset = 0;
int used = 0;
char line[1000];
char item[200];
fgets ( line, sizeof ( line), stdin);
while ( ( sscanf ( line + offset, "%199s%n", item, &used)) == 1) {
    offset += used;
    // do something with item
}

【讨论】:

    【解决方案2】:

    您可以使用缓冲区来存储第一次使用 fgets() 读取的所有数据;功能。

    所以如果表达式格式正确,你已经有了数据,不需要读取它

    算法是: 使用 fgets() 获取表达式的每个部分 存储在缓冲区变量中,然后使用空格或其他字符分隔 如果表达式格式正确,则获取缓冲区 读取用空格分隔的缓冲区的每个部分,然后放入一个新的 int 变量(或数组)中 使用此变量(或数组)计算表达式

    看看这2个功能,他们可能会帮助你

    http://www.cplusplus.com/reference/string/string/find/ http://www.cplusplus.com/reference/string/string/substr/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-17
      • 2018-05-06
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多