我正在处理一个采用数学表达式的程序,将其转换为posfix符号,然后求解它。
首先,我正在检查表达式以查看是否形成得很好(开放括号和括号与关闭相匹配)。为了进行检查的一部分,我使用fgets()
获取字符串,因为据我所知,它忽略了白色空间。
现在,当空白显示时,我必须打破字符串,但是在此部分中,使用 scanf( "%s" ,...)
有什么办法可以使用scanf技巧打破字符串,在int部分工作,而无需再次阅读?
您可以使用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
}
您可以使用缓冲区使用fgets()首次存储所有读取的数据;功能。
因此,如果表达式很好,您已经拥有数据,而无需阅读
算法是: 使用fgets()获取表达式的每个部分 存储在缓冲区变量分开,然后使用空间或其他字符 如果表达式很好,请获取缓冲区 读取缓冲区的每个部分与空间分开,然后放入新的int变量(或数组)中 使用此变量(或数组)
计算表达式看这个2个功能,它们可能会帮助您
http://www.cplusplus.com/reference/string/string/find/http://www.cplusplus.com/reference/string/string/substr/