我正在研究一个采用数学表达式的程序,将其转换为posfix符号然后解决它。
首先,我检查表达式以确定它是否形成良好(左括号和括号与结束表达式匹配)。要进行检查,我使用fgets()
来获取字符串,因为据我所知它忽略了空格。
现在我必须在出现空格时打破字符串,但是对于这部分,使用scanf( "%s" ,...)
的缓冲区更容易使用做
有什么方法可以使用scanf技巧来破解字符串,逐个部分地工作而不再读它?
答案 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/