簡體   English   中英

比較相同的詞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM