我有以下字符串
/foo123/bar123/card45/foofoo/1.3/
我想解析“card”这个词之后的数字,在上面的例子中是45。我应该使用sscanf这样做,如果是这样的话,我该如何去做?
由于
答案 0 :(得分:3)
我应该将[{1}}用于[XYZ问题]
否强>
但您可以改为使用sscanf
和strstr
:
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];