c语言统计单词个数指针,我是新手,问大家一个问题。单词统计,不用指针

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

#include

#define WORD_MAXLENGTH 32

#define CELL_MAXNUM     4096

int hash(char word[], int maxnum)

{

const int mainFactor = 17;

const int subFactor = 11;

int i;

unsigned int hashValue = 0;

// calculate hash value

for(i = 0; word[i] > 0; i++)

{

hashValue *= (i + 1) * mainFactor;

hashValue += word[i] * (i + 1) * subFactor;

}

return hashValue % maxnum;

}

int main()

{

char words[CELL_MAXNUM][WORD_MAXLENGTH];

char currentWord[WORD_MAXLENGTH];

int wordCount[CELL_MAXNUM];

int i;

// init hash table

memset(words, 0, sizeof(words));

memset(wordCount, 0, sizeof(wordCount));

// read each word and store them into hash table

while(scanf("%s", currentWord) != EOF)

{

int hashValue;

// find space for current word

hashValue = hash(currentWord, CELL_MAXNUM);

while(strlen(words[hashValue]) > 0)

if(strcmp(words[hashValue], currentWord) != 0)

hashValue = (hashValue + 1) % CELL_MAXNUM;

else break;

// store current word

wordCount[hashValue] += 1;

strcpy(words[hashValue], currentWord);

}

// print each word

for(i = 0; i < CELL_MAXNUM; i++)

if(wordCount[i] > 0)

printf("%s: %d\n", words[i], wordCount[i]);

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值