[英]Compare same words
我是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
和單詞的數量而不是字符一樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.