gpt4 book ai didi

比较 C 中的 2 个字符串并打印相等的部分

转载 作者:行者123 更新时间:2023-11-30 21:43:32 25 4
gpt4 key购买 nike

如何比较最大长度为 100 的 2 个字符串并打印它们的相等部分,例如:

STRING 1 : ABCDEFGHIJKLMNOP
STRING 2 : QWERABCDZXVBERTY

这些字符串的相等部分是:ABCD

最佳答案

请看看这个程序是否可以帮助您。它将两个字符串作为来自命令行的参数。

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

int *substring(char *s, char *t) {
int strlen1 = strlen(s);
int strlen2 = strlen(t);
int len = strlen1 < strlen2 ? strlen1 : strlen2;
int i, j, k;
int longest = 0;
int **ptr = (int **) malloc(2 * sizeof(int *));
static int *ret;
ret = (int *) calloc(strlen1 + 1, sizeof(int));
for (i = 0; i < 2; i++)
ptr[i] = (int *) calloc(strlen2, sizeof(int));

k = 0;
for (i = 0; i < strlen1; i++) {
memcpy(ptr[0], ptr[1], strlen2 * sizeof(int));
for (j = 0; j < strlen2; j++) {
if (s[i] == t[j]) {
if (i == 0 || j == 0) {
ptr[1][j] = 1;
} else {
ptr[1][j] = ptr[0][j - 1] + 1;
}
if (ptr[1][j] > longest) {
longest = ptr[1][j];
k = 0;
ret[k++] = longest;
}
if (ptr[1][j] == longest) {
ret[k++] = i;
ret[k] = -1;
}
} else {
ptr[1][j] = 0;
}
}
}
for (i = 0; i < 2; i++)
free(ptr[i]);
free(ptr);
ret[0] = longest;
return ret;
}

int main(int argc, char *argv[]) {
int i, longest, *ret;

if (argc != 3) {
printf("usage: longest-common-substring string1 string2\n");
exit(1);
}

ret = substring(argv[1], argv[2]);
if ((longest = ret[0]) == 0) {
printf("There is no common substring\n");
exit(2);
}

i = 0;
while (ret[++i] != -1) {
printf("%.*s\n", longest, &argv[1][ret[i] - longest + 1]);
}

exit(0);
}

测试

./a.out ABCDEFGHIJKLMNOP QWERABCDZXVBERTY
ABCD

关于比较 C 中的 2 个字符串并打印相等的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41091174/

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