如何断开使用 fgets() 读取的字符串,使用 scanf("%s",..)
How to break a string, that was read using fgets(), using scanf("%s",..)
我正在开发一个程序,该程序采用数学表达式,将其转换为后缀表示法,然后求解。
首先,我检查表达式以查看其格式是否正确(左括号和圆括号与右括号匹配)。为了进行检查,我使用 fgets()
来获取字符串,因为据我所知它会忽略白色 spaces。
现在我必须在出现白色 space 时断开字符串,但是对于这部分,使用 do 会更容易,而 使用 a 的缓冲区scanf( "%s" ,...)
有什么方法可以使用 scanf 技巧来断开字符串,逐个处理 int 而无需再次读取它?
您可以使用一个缓冲区来存储第一次使用fgets()读取的所有数据;功能。
因此,如果表达式格式正确,则您已经拥有数据,不需要读取它
算法将是:
使用 fgets() 获取表达式的每个部分
存储在缓冲区变量中,然后使用 space 或其他字符分隔
如果表达式格式正确,则获取缓冲区
读取缓冲区中用 space 分隔的每个部分,然后放入一个新的 int 变量(或数组)中
使用此变量(或数组)
计算表达式
看看这2个函数,或许能帮到你
http://www.cplusplus.com/reference/string/string/find/
http://www.cplusplus.com/reference/string/string/substr/
您可以使用 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
}
我正在开发一个程序,该程序采用数学表达式,将其转换为后缀表示法,然后求解。
首先,我检查表达式以查看其格式是否正确(左括号和圆括号与右括号匹配)。为了进行检查,我使用 fgets()
来获取字符串,因为据我所知它会忽略白色 spaces。
现在我必须在出现白色 space 时断开字符串,但是对于这部分,使用 do 会更容易,而 使用 a 的缓冲区scanf( "%s" ,...)
有什么方法可以使用 scanf 技巧来断开字符串,逐个处理 int 而无需再次读取它?
您可以使用一个缓冲区来存储第一次使用fgets()读取的所有数据;功能。
因此,如果表达式格式正确,则您已经拥有数据,不需要读取它
算法将是: 使用 fgets() 获取表达式的每个部分 存储在缓冲区变量中,然后使用 space 或其他字符分隔 如果表达式格式正确,则获取缓冲区 读取缓冲区中用 space 分隔的每个部分,然后放入一个新的 int 变量(或数组)中 使用此变量(或数组)
计算表达式看看这2个函数,或许能帮到你
http://www.cplusplus.com/reference/string/string/find/ http://www.cplusplus.com/reference/string/string/substr/
您可以使用 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
}