3

我有一个包含空格和标签的字符串,例如:

<note label="description">sp|P02671|FIBA_HUMAN Fibrinogen alpha chain OS=Homo sapiens GN=FGA PE=1 SV=2</note>

我只想捕获描述标记之后和'OS ='之前的部分,并且想知道使用自定义符号使用sscanf是否有意义(请参阅页面底部我当前正在进行的工作)或者是否更好使用第二个 strstr 用于解析 OS。

提前致谢

- 附加信息 -

if ( (p_str = (char*) strstr(buffer,"\"description\">")) ) {
  sscanf(p_str+14,"%[^OS]",(file+teller)->description);
}

PS: %[^OS] 在第一次出现“O”时打破字符串,我很想知道如何输入一组字符(如果可能的话)。

4

1 回答 1

1

我宁愿使用strstr两次,如下:

#include <assert.h>
#include <stdlib.h>
#include <string.h>

char *f (const char *s) {
#define START_SYM   "\"description\""
#define END_SYM     "OS="

    char *dst   = NULL;
    char *start = strstr(s, START_SYM);
    char *end   = strstr(s, END_SYM);

    if (start != NULL && end != NULL) {
        ptrdiff_t diff = end - start;

        assert(diff > 0);
        dst = malloc(diff + 1);

        if (dst != NULL) {
            memcpy(dst, start + sizeof START_SYM, diff);
            dst[diff] = '\0';
        }
    }

    return dst;
}
于 2013-02-25T17:17:49.773 回答