gpt4 book ai didi

c - 拆分/解析 char 数组并获取两个标记 C 之间的值

转载 作者:太空宇宙 更新时间:2023-11-04 01:00:35 26 4
gpt4 key购买 nike

因此,经过一些搜索和谷歌搜索后,我无法弄清楚如何在 char 数组中的两个标记之间提取值。这是我的一些代码:

    char *data= (char *) malloc( 50);
strcpy(data, "123 123 123 abcdef/456->ghijklm/789 123 123");

我需要将“abcdef”提取为 Str1,将“ghijkm”提取为 Str2。

大家推荐的第一个解决方案是strtok如下:

str1 = strtok(temp, "/");    // str1=abcdef

但是第二个呢?我的意思是 str2,所以。

Q1:如何将 ghijkmn 提取为 str2?

问题 2:我可以利用任何其他现有的效用函数吗?或任何其他解决方案来处理这种情况?

[添加:]我需要的是所有由空格分隔的字符串。除了一个不同之外,所有“123”都是所需的格式。如上所述,我只需要其中的两部分。

最佳答案

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

char *between(const char *str, char start, char end){
//return between start and end. However, start and end are not included.
const char *s = NULL, *e;
if(!str || !*str) return NULL;
if((e = strchr(str+1, end)) == NULL)
return NULL;//end character not found
for(int i = e-str-1; i >= 0; --i){
if(str[i] == start){
s = str + i + 1;
break;
}
}
if(!s)
return between(e, start, end);//start character not found
int len = e - s;
char *ret = malloc(len + 1);
if(ret){
memcpy(ret, s, len);
ret[len] = 0;
}
return ret;
}

int main(void){
const char *data = "123 123 123 abcdef/456->ghijklm/789 123 123";
char *str1 = between(data, ' ', '/');

if(str1){
printf("str1: '%s'\n", str1);
char *str2 = between(data, '>', '/');//use strstr+strlen+1 for after str1, or save search position
if(str2)
printf("str2: '%s'\n", str2);
free(str1);free(str2);
}
return 0;
}

关于c - 拆分/解析 char 数组并获取两个标记 C 之间的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41266467/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com