C++

C/C++中分割字符串

使用sscanf库函数分割字符串

Posted by bbkgl on October 10, 2019

我最怜君中宵舞

道“男儿到死心如铁”

看试手,补天裂

解析HTTP响应报文的时候,响应头中除了第一行,其他行都是key: value结构,怎么高效方便地解析成map类型的数据呢?

我首先想到的就是sscanf函数,于是写了如下程序:

#include <cstdio>

int main() {
    char *str = "sss: sssss";
    char key[5], value[10];
    sscanf(str, "%s: %s", key, value);
    std::cout << key << ": " << value;
    return 0;
}

然后输出却是:

sss::

显然不行,于是开始上网搜,慢慢发现sscanf函数居然支持正则,没错!!!支持正则!!!(部分)

什么都需要自己造轮子的C/C++居然有库函数支持正则。。。

于是,我们便可以写出如下程序:

#include <cstdio>

int main() {
    char *str = "sss: sssss";
    char key[5], value[10];
    sscanf(str, "%[^:]: %[^:]", key, value);
    std::cout << key << ": " << value << std::endl;
    return 0;
}

输出:

sss: sssss

没错,输出是正确的,我们想要的结果!!!