gpt4 book ai didi

比较相同的单词

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

我是 C 编程新手,遇到了 2 个问题。我有两个字符串,然后我需要将它们分成单词并找出两个字符串是否包含相同的单词。我将用我的代码来解释它。

输入:

"He said he would do it."
"IT said: 'He would do it.'"

这两个字符串被放入两个数组中。首先我需要解析其他字符中的单词。

调用函数:

char ** w1 = parse(s1, &len1);

变量 len 计算行数(单词)。

函数解析:

char ** parse(char *w, int * i)
{
int j = 0, y, dupl = 0; //variables for cycles and duplicate flag
char d[] = " <>[]{}()/\"\\+-*=:;~!@#$%^&_`'?,.|";
char* token = strtok(w, d);
unsigned len = strlen(token), x;
unsigned plen = len;
char ** f = (char**) malloc(len * sizeof (char*));
while (token != NULL)
{
len = strlen(token);
for (x = 0; x < len; x++)
{
token[x] = tolower(token[x]);
}

for (y = 0; y < *i; y++) //cycle for deleting duplicated words
{
if (equals(token, f[y]) == 1)
{
dupl = 1; break;
}

}
if (dupl == 1)
{
token = strtok(NULL, d);
dupl = 0;
continue;
}

if (len >= plen)
{
f = (char**) realloc(f, (len+1) * sizeof (char*));
plen = len;
}
else
f = (char**) realloc(f, (plen+1) * sizeof (char*));

f[j] = token;
token = strtok(NULL, d);
*i = *i + 1;
j++;
}
free(token);
return f;
}

好吧,现在我有 2x 2Darrays,然后对它进行排序 (qsort(w1, len1, sizeof (char*), cmp);) 并比较它:

for (i = 0; i < len2; i++)
if (equals(w1[i], w2[i]) == 0)
return 0;

函数等于:

int equals(char *w1, char *w2)
{
if (strcmp(w1, w2) == 0)
return 1;
return 0;
}

我知道所有这一切都可以更快,但首先我需要解决我的问题。这适用于我在开始时编写的输入,但是当我输入很长的内容(例如 500 个字符)时,我的结果是Aborted。我认为问题出在这里:

f = (char**) realloc(f, (len+1) * sizeof (char*));

但不知道为什么。第二件事是,我无法释放我的数组。这个

void Clear (char ** w, int max)
{
int i;
for (i = 0; i < max; i++)
free(w[i]);
free(w);
}

给我一​​个段错误。感谢您的宝贵时间,对于我糟糕的英语和糟糕的编程技能,我深表歉意。

最佳答案

你的逻辑中似乎混淆了解析函数中的字长和字数。

char ** f = (char**) malloc(len * sizeof (char*));

我认为例如上面部分中的 len 应该是单词数而不是字符数。

关于比较相同的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20424263/

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