使用C sscanf解析目录路径中的数字

时间:2013-04-30 18:10:14

标签: c parsing scanf

我有以下字符串

/foo123/bar123/card45/foofoo/1.3/

我想解析“card”这个词之后的数字,在上面的例子中是45。我应该使用sscanf这样做,如果是这样的话,我该如何去做?

由于

3 个答案:

答案 0 :(得分:3)

  

我应该将[{1}}用于[XYZ问题]

但您可以改为使用sscanfstrstr

strtol

答案 1 :(得分:2)

使用strstr()后跟sscanf()即可完成任务。假设您在字符数组source_string中有源字符串。然后使用:

char * ptr;
ptr = strstr(source_string,"card");

sscanf (ptr,"%*s %d",&number);  //Sorry this is wrong!!
sscanf(ptr,"card%d",&number);   //This is right!!
sscanf(ptr,"%*4s%d",&number);   //This works too


printf("The card number is %d",number);

strstr()会为您提供“卡片”开始的地址。然后您将该地址作为来源传递给sscanf()%*s读取“卡片”,然后将其丢弃。之后%d读取“card”后面的数字并将其存储在整数变量number中,然后使用printf()显示该变量。

答案 2 :(得分:0)

如何使用简单的分割功能来减少你的路径'/'?

这是我用来按特定字母拆分随机字符数组的函数。它将每个已解析的部分保存到字符串向量中。

vector<string> split(const char *str, char c)

{
    vector<string> result;

    while(1)
    {
        const char *begin = str;

        while(*str != c && *str)
                str++;

        result.push_back(string(begin, str));

        if(0 == *str++)
                break;
    }

    return result;
}

所以,你可以像这样调用这个函数

vector<string> ParsedString;
ParsedString = split("Your/Random/path", '/');

然后,您可以访问ParsedString的每个索引,以查看它们中的任何一个都有您要查找的特定单词。

或者,如果您要查找的单词始终位于前面的第3或第4位,则您只能选择该单词进行搜索。

string InterestedTarget = ParsedString[4];