目前我正在阅读C书,但我无法解决一项练习。鉴于我此时花了超过1天,我需要一些帮助/想法。
"假设str是一个包含"销售等级的字符串"立即 前面带#符号(其他字符可以在#和/或之前 按照销售排名)。销售排名是一系列十进制数字 可能包含逗号,例如以下示例:
989 24,675 1,162,620
写一个sscanf调用来提取销售排名(但不是# 符号)并将其存储在名为sales_rank的字符串变量中。"
我的理解是:
例如,如果我们有:
char *str = "ana are mer2,1#3lala";
sales_ranks应该是:" 2,1"
以下情况:
char *str = "ana ar#e mer2,1a3lala";
sales_ranks是一个空字符串。
我在这里找到(http://cboard.cprogramming.com/c-programming/149330-getting-part-string-sscanf.html)一些有用的信息,但这不是正确的解决方案。 他们用错误的方法解释了这个练习:
char *str = "ana are mer2,1#3lala";
sales_ranks是" 3"这是好的但不是作者要求的:"销售排名"紧接着是#符号
编辑:
我误解了谁先于谁。 :| (所以在链接中暴露的解决方案是可以的)
实际上我花了这么多时间为这种模式找到解决方案: " {十进制}#" :)
但是有可能吗? 我的意思是,如果有可能:#符号紧跟在"销售排名"
之后
答案 0 :(得分:1)
您可以使用带有%[]
和%*
语法的sscanf来实现此目的:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char sales_rank[200];
char *str;
sales_rank[0] = 0;
str = "ana are mer2,1#3lala";
sscanf(str, "%*[^#]#%199[0-9,]", sales_rank);
printf("sales_rank=%s\n", sales_rank);
return 0;
}
%*[^#]
将跳过#
之前的字符,忽略它们,而%199[0-9,]
会将sales_rank字符串存储在变量中。阅读sales_rank
后匹配过程将停止。任何其他字符都将被忽略。