在两个分隔符之间提取数据

时间:2015-02-11 09:59:57

标签: c delimiter string-parsing

我只想知道是否可以获取两个分隔符之间存在的数据(分隔符是一个字符串)。

例如,原始字符串在

下面
<message%20type%3D"info"%20code%3D"20005">%20<text>Conference%20successfully%20modified</text>%20<data>0117246</data>%20%20</message>%20

我希望<text>代码之间存在数据。我需要数据的字符串可以是不同的。字符串也可以像这样

<message%20type%3D"info"%20code%3D"20001">%20<text>Conference%20deleted</text%20%20<vanity>0116976</vanity>%20</message>%20<message%20type%3D"info"%20code%3D"20002">%20<text>Number%20of%20conferences%20deleted</text>%20<data>1</data>%20%20</message>%20  

但我始终需要<text>标记之间存在的数据。

那么在C语言中是否可能还是有其他选择?

2 个答案:

答案 0 :(得分:5)

我选择strstr()

例如:

#include <stdio.h>
#include <string.h>

int main(void) {
    char data[] = "<message%20type%3D\"info\"%20code"
                  "%3D\"20005\">%20<text>Conference%"
                  "20successfully%20modified</text>%"
                  "20<data>0117246</data>%20%20</mes"
                  "sage>%20";
    char *p1, *p2;
    p1 = strstr(data, "<text>");
    if (p1) {
        p2 = strstr(p1, "</text>");
        if (p2) printf("%.*s\n", p2 - p1 - 6, p1 + 6);
    }
    return 0;
}

答案 1 :(得分:4)

有一些函数strtok()strtok_r()可用于根据分隔符提取数据。

char a[100] = "%20Conference%20successfully%20modified%200117246%20%20%20";
char *p = strtok(a,"%");
while(p != NULL)
{
  // Save the value in pointer p
  p = strtok(NULL,"%");
}

如果您希望字符串a不被修改,那么请使用单独的数组b char b[100]并将字符串复制到b

strcpy(b,a);

代码和输出:

#include <stdio.h>

int main(void) {
    char a[100] = "%20Conference%20successfully%20modified%200117246%20%20%20";
    char *p = strtok(a,"%");
    char n[20];
    while(p != NULL)
    {
      strcpy(n,p);
      p = strtok(NULL,"%");
      printf("%s\n",n);
    }
    return 0;
}

输出:

20Conference
20successfully
20modified
200117246
20
20
20

PS:strtok()修改传递的string.Check man http://linux.die.net/man/3/strtok_r