如何使用sscanf()函数获取字符串的一部分?

时间:2015-04-02 15:38:51

标签: c

目前我正在阅读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"这是好的但不是作者要求的:"销售排名"紧接着是#符号

编辑:

我误解了谁先于谁。 :| (所以在链接中暴露的解决方案是可以的)

实际上我花了这么多时间为这种模式找到解决方案: " {十进制}#" :)

  

但是有可能吗?   我的意思是,如果有可能:#符号紧跟在"销售排名"

之后

1 个答案:

答案 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后匹配过程将停止。任何其他字符都将被忽略。

相关问题