2013-07-08 188 views
0

我有6个常量字符串(每个5个字母)如何在c中实现计算hashmap?

我得到一个字(少于6字)。

我想统计每个单词有多少次出现。

我该如何在C中实现它?

我曾尝试:

char searchEngineNames[6][5] = { "waze_", "faceb", "fours", "googl", 
     "fueli", "yello" }; 

    static void foo(const char* res_name, int success, void *context, char *last_modified) { 
     if (success){ 
       for (int i=0; i<6; i++) 
       { 
        char substringFiveChars[6]; 

        strncpy(substringFiveChars, res_name, 5); 

          char substringFiveChars[6]; 

          substringFiveChars[5] = 0; 

        if (strcmp(searchEngineNames[i],substringFiveChars) == 0) 
        { 
        ... 
        } 
    .. 
       } 

例如此流:

“的Wooo _”, “的Wooo _”, “faceb”, “的Wooo _”, “谷歌”

我将最终得到:

"wooo_" 3 times 

"faceb" 1 times 

"google" 1 times 

"fours" 0 times 

"fuelil" 0 times 

"yello" 0 times 
+0

如果你知道如何实现一个简单的HashMap(而且很容易),你随便拿个字符串作为键和一个unsigned int作为价值。我不确定要了解到目前为止您尝试了些什么。 –

+0

这个问题我没有字符串C.只有char *。那我必须用3D数组? –

+0

不知道你的编程技巧,很难知道如何回答。你熟悉链表和哈希表是如何工作的? –

回答

0

我用2个阵列,而不是1

char searchEngineNames[6][5] = { "wooo_", "faceb", "fours", "google", 
     "fuelil", "yello" }; 

int searchEngineCounts[6] = {0,0,0,0,0,0}; 



static void foo(const char* res_name, 
     int success, void *context, char *last_modified) { 
    if (success) { 

     int i = 0; 
     for (i; i < 6; i++) { 
      char substringFiveChars[6]; 

      strncpy(substringFiveChars, res_name+7, 5); 

      substringFiveChars[5] = 0; 

      if (strcmp(searchEngineNames[i], substringFiveChars) == 0) { 
       searchEngineCounts[i]++; 

       if (searchEngineCounts[i] < 3) { 

... 
       } 
      } 
     } 

    } 
} 
+0

这不是一个hashmap。您正在比较您的信息流的当前单词与全部** searchEngineNames。您必须使用散列函数(例如,请参阅http://www.cse.yorku.ca/~oz/hash.html)并实施散列映射(根据散列值选择列表的链接列表数组) 。 –