gpt4 book ai didi

c - C语言中提取子字符串

转载 作者:行者123 更新时间:2023-11-30 18:46:56 24 4
gpt4 key购买 nike

我正在尝试用 C 语言编写一个方法,它将提取起始字符串和结束字符串之间的子字符串。基于 bool 标志,它可能包含/排除起始子字符串。即,

 char source[100] = "Some random text with $$KEY:value$$";
char dest[12];
extractSubstring (source, dest, "KEY:", "$", false);

这应该填充 dest = "value"。

我的程序如下:

#include <stdio.h>
typedef int bool;
#define true 1
#define false 0

int main()
{
char source[100] = "Some random text with $$KEY:value$$";
char dest[12];
extractSubstring (source, dest, "KEY:", "$", false);
return 0;
}

void extractSubstring (char *source, char *dest, char *startingText,
char *endingText, bool includeStart)
{
int sourceLen = strlen(source);
int startLen = strlen(startingText);
int endingIndex = sourceLen;
source = strstr (source, startingText);
if(includeStart){
strcpy (dest, source);
}
else{
source+=startLen;
strcpy (dest, source);
}
if(strlen(endingText)>0){
int endingIndex = strstr (dest, endingText) - dest;

}
dest[endingIndex] = '\0';
printf(dest);
}

这会将 dest 填充为“value$$”而不是“value”。如何丢弃最后一个字符。

最佳答案

问题来自于变量的生命周期(这里是endingIndex)。删除 int 应该可以解决问题,但我建议不要向 dest 写入不必要的字符(存在溢出风险)。
(此外,您应该使用 size_t 类型来表示数组长度。)

您应该优化字符串的编写方式:

void extractSubstring (char *source, char *dest, char *startingText,
char *endingText, bool includeStart)
{
size_t sourceLen = strlen(source);
size_t startLen = strlen(startingText);
size_t endingIndex = sourceLen;
source = strstr (source, startingText);
if(!includeStart){
source+=startLen;
}

if(strlen(endingText)>0){
endingIndex = strstr (source, endingText) - source;
strncpy(dest, source, endingIndex);
} else {
strcpy (dest, source);
}

dest[endingIndex] = '\0';
printf(dest);
}

希望有帮助。

[编辑:wildplasser评论解释得很好]

关于c - C语言中提取子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49903992/

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