我有以下字符串
/foo123/bar123/card45/foofoo/1.3/
我想解析单词“card”后面的数字,在上面的示例中为 45。我应该为此使用 sscanf,如果是,我将如何去做?
谢谢
我应该
sscanf
用于 [XYZ 问题]
不。
但是您可以使用strstr
andstrtol
代替:
const char *s = "/foo123/bar123/card45/foofoo/1.3/";
const char *p = "card";
const char *t = strstr(s, p);
int i = -1; // a negative number indicates a parse failure, for example
if (t != NULL) {
t += strlen(p);
char *end;
i = strtol(t, &end, 10);
if (!end || *end != '/') {
// parsing the number failed
}
}
使用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
后面的数字并将其存储在整数变量number
中,你然后使用printf()
.
使用简单的分割功能如何通过'/'切断你的路径?
这是我用来按特定字母拆分随机字符数组的函数。它将每个解析的部分保存到字符串向量中。
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];