如何在两个指定的字符串之间提取字符串?
例如:
<title>Extract this</title>
。是否有一种简单的方法可以使用strtok()
或更简单的方法来获取它?
编辑:指定的两个字符串为<title>
和</title>
,提取的字符串为Extract this
。
答案 0 :(得分:4)
strstr()
搜索第一个子字符串。[ [start of sub string 1] + [length of sub string 1] ]
和[start of sub string 2]
之间的所有内容都是您感兴趣的字符串。strncpy()
或memcpy()
答案 1 :(得分:1)
这是一个如何做到这一点的例子,它没有检查输入字符串的完整性
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *extract(const char *const string, const char *const left, const char *const right)
{
char *head;
char *tail;
size_t length;
char *result;
if ((string == NULL) || (left == NULL) || (right == NULL))
return NULL;
length = strlen(left);
head = strstr(string, left);
if (head == NULL)
return NULL;
head += length;
tail = strstr(head, right);
if (tail == NULL)
return tail;
length = tail - head;
result = malloc(1 + length);
if (result == NULL)
return NULL;
result[length] = '\0';
memcpy(result, head, length);
return result;
}
int main(void)
{
char string[] = "<title>The Title</title>";
char *value;
value = extract(string, "<title>", "</title>");
if (value != NULL)
printf("%s\n", value);
free(value);
return 0;
}
答案 2 :(得分:0)
The answer很好。但是,只是为了添加更通用的方法(不依赖于<tag>
值本身),您也可以这样做,
strchr()
<
[标签张开角括号]的第一个实例
strchr()
找到>
[标记结束尖括号]的第一个第一个实例。tag
值。strrchr()
<
[标签张开角括号]的最后一个实例
strrchr()
找到>
[标签结束角括号]的最后一个实例。tag
值进行比较,如果等于,则从memcpy()
(关闭开始标记)到strdup()
(从结束标记开始)执行acualarray[first_last_index]
/ acualarray[last_first_index]
。 )