gpt4 book ai didi

c++ - 提取特定字符串之前的字符串

转载 作者:行者123 更新时间:2023-11-30 18:47:15 27 4
gpt4 key购买 nike

我想获取一系列某些字符或子字符串之前的字符串。例如,我有

unsigned char KeyStr[BUFFER_SIZE] = "-#NOT#"

unsigned char SomeStr[BUFFER_SIZE] = "this is the string i want to extract-#NOT#"

从上面的字符数组中,我想得到这是我想要提取的字符串。我想获取 -#NOT#KeyStr 之前的任何字符串。

我知道我可以使用 strstr 来检查 KeyStr 是否存在于 SomeStr 中,但是我如何在 KeyStr 之前提取字符串 KeyStr。我不能使用 strtok 因为据我所知,它检查分隔符而不是子字符串。

我是 C 语言新手,完全一无所知。任何帮助将不胜感激。

最佳答案

1:(我假设您有充分的理由在缓冲区中使用 unsigned char 而不是 char,并且为什么在 C++ 中使用旧式 C 函数而不是现代 C++ 方法)。

就像您在问题中所说的那样,您可以使用 strstr() 来查找 token 。找到标记后,您可以使用简单的指针算术来知道要复制多少个字符,并使用 strncpy() 进行实际复制,例如:

unsigned char KeyStr[BUFFER_SIZE] = "-#NOT#";
unsigned char SomeStr[BUFFER_SIZE] = "this is the string i want to extract-#NOT#";

unsigned char *found = (unsigned char*) strstr((char*)SomeStr, (char*)KeyStr);
if (!found) ...

unsigned char extracted[BUFFER_SIZE];
strncpy((char*)extracted, (char*)SomeStr, found - SomeStr);

现在,话虽如此,请考虑使用实际的 C++ 技术而不是 C:

std:string KeyStr = "-#NOT#";
std::string SomeStr = "this is the string i want to extract-#NOT#";

std::string::size_type index = SomeStr.find(KeyStr);
if (index == std::string::npos) ...

std::string extracted = SomeStr.substr(0, index);

关于c++ - 提取特定字符串之前的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49245217/

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