2013-05-27 74 views
1

我在理解如何使用字符串進行二分搜索時遇到了一些麻煩。我輸入的是命令行提示符中的一個句子,它是argv [1],(argv [0]是我輸出的可執行文件的名稱)。這是它的外觀:帶字符數組的二進制搜索?

./a.out "This is my sentence." 

並列入我的檔案也持有兩個數組.h文件 - 一個名詞陣列持有某一套名詞和保存一組特定的動詞的動詞陣列。我想要做的只是檢查argv [1]中的動詞和名詞是否在名詞或動詞數組中,並且我想將它們打印出來。然而,我無法理解如何從句子中解析每個單詞,並將它們與動詞或名詞數組進行比較,因爲C中沒有字符串(與C++相反)。任何人都可以提供一個算法/ psuedocode或如何這樣做的想法?如果是這樣,將非常感激!

+1

它必須被排序你知道。 – Elazar

+0

使用'strcmp()'或'strncmp()'比較c字符串。 – Elazar

回答

2

C中的字符串是以NULL(字節值0)字符結尾的字符數組。

您可以使用char []或char *來引用「字符串」。

使用指向每次遞增的輸入字符串的指針循環。雖然角色不是空格,但將其添加到某個緩衝區。如果字符是空格,則向緩衝區添加NULL(C字符串以null結尾),並使用緩衝區作爲二進制搜索算法的輸入,該搜索算法將使用strcmp比較字符串。清除緩衝區並重復,直到找到NULL字符。

下面是一些代碼,將解析輸入單詞:

int main(int argc, char* argv[]) 
{ 
    char *p = argv[1]; 
    char buffer[100]; //assuming no words > 100 characters 

    int count = 0; 

    while(buffer[count++] = *p++) 
    { 
     if(*p == ' ' || *p == 0) 
     { 
      buffer[count] = 0; 
      printf("Word: %s\n", buffer); 

      //do something with buffer 

      for(int i=0; i<count; i++) //clear the buffer 
       buffer[i] = 0; 
      count = 0; 
     } 
    } 

    return 0; 
} 
+0

謝謝!我真的很感激代碼。我沒有最終使用它,但你的解釋(我忘記使用空字符)是非常有用的,我想到了這一切。 – user1871869

1

是的,因爲它已經提到,陣列需要的名詞和動詞要爲這個整理工作。 strcmp()將返回-1(或更少),0或1(或更多),具體取決於左側參數是小於,等於還是大於右側。

想不到一個算法比Wikipedia更好的地方,它甚至用C語言編寫。當然,你需要根據你的目的適應它。

祝你好運。