如何使用scanf("%s",...)打破使用fgets()读取的字符串

时间:2015-05-06 14:42:55

标签: c buffer scanf fgets

我正在研究一个采用数学表达式的程序,将其转换为posfix符号然后解决它。

首先,我检查表达式以确定它是否形成良好(左括号和括号与结束表达式匹配)。要进行检查,我使用fgets()来获取字符串,因为据我所知它忽略了空格。

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

有什么方法可以使用scanf技巧来破解字符串,逐个部分地工作而不再读它?

2 个答案:

答案 0 :(得分:1)

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

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
}

答案 1 :(得分:0)

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

因此,如果表达式格式正确,则您已经拥有了数据,并且不需要读取它

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

计算表达式 看看这个2功能,他们可能会帮到你

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