gpt4 book ai didi

从数组中选择一个字符,然后替换第二个数组 - C

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

我正在用C语言做一个函数,我在char letter[]字段中存储了我想要的功能,在char available[]中删除/省略只是在该字段中没有。

我在这里发现 stackoverflow replace 函数,我覆盖了字符串。该功能按我想要的方式工作,但我已将其放在那里进行展示。问题出现在函数调用和 char letter[] 的调用字母中。

替换功能

char *replace_str(char *str, char *orig, char *rep) {
static char buffer[4096];
char *p;
if(!(p = strstr(str, orig))) return str;
strncpy(buffer, str, p-str);
buffer[p-str] = '\0';
sprintf(buffer+(p-str), "%s%s", rep, p+strlen(orig));
return buffer;
}

在我的 main 中调用函数。

int main() {
char letters[] = "arpstxgoieyu";
char available[] = "abcdefghijklmnopqrstuvwxyz";

getAvailableLetters(letters, available);
}

在这种情况下,输出应该是:“bcdfhjklmnqvwz但函数返回所有字母。

该函数应覆盖 char letter[] 中现有的 char available[] 字符

void getAvailableLetters(char letters[], char available[]) {
char copy[30][30];
memset(copy, '\0', sizeof(copy));
strcpy(copy[0], available);
int d = 1;
for (int i = 0, length = (int)strlen(letters); i < length; i++, d++) {
strcpy(copy[d], replace_str(copy[i], &letters[i], ""));
}

strcpy(available, copy[d-1]);
}

问题出在 &letters[i] 上。因为需要将每个变量只取一个点,所以我可以将其替换。如果我使用“&”,作为 replace_str' 中的函数 char *orig\237 类型的示例,立即替换函数不执行任何更改。

我发现如果你给出 strcpy(copy[d], Replace_str(copy[i], "a", "")); 那么它就可以工作,但再次重复整个字母表切换,当然不。

所以,请问如何处理,我不必切换到每个字母并有效地这样做。谢谢。

最佳答案

您的replace_str函数使用一个大小有限的静态缓冲区,并且不是线程安全的。不要那样做。

所以,如果我理解正确的话,你有一串字母和另一个字符串,并希望从中构造另一个字符串,其中指定字母已被删除。

我建议首先构建一个查找表:

char allowed_letters[256];

(您可以通过使用带有位移位和掩码的位数组进行微优化,但是这只会节省几个字节的内存,所以不值得)

然后,使用 for 循环将 allowed_letters 初始化为所有字母,然后循环遍历字符串字母并设置 allowed_letters[(unsigned char)letters[i]] = 0;

现在你有了一个查找表,它告诉你哪些字母是允许的,哪些是允许的禁止。

然后您需要考虑要将结果存储在哪里。一种选择是是使用另一个字符串缓冲区,可能分配有malloc(strlen(可用)+1).或者也许您想要一个就地算法覆盖可用字母的字符串。

无论如何,无论哪种方式,您都需要管理一个指向的输出指针(outp)输出字符串中的位置(无论是单独的内存块还是原始可用字符串)和输入指针(inp),它指向您正在读取的输入字符串的位置。

然后做类似的事情:

while (*inp)
{
if (allowed_letters[(unsigned char)*inp])
*outp++ = *inp++;
else
inp++;
}

并且不要忘记以“\0”终止输出字符串。

关于从数组中选择一个字符,然后替换第二个数组 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29165240/

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