K&R练习题6-1统计关键词出现的次数
2014-09-18 23:26
148 查看
这道练习题训练了:
1.结构体数组
2.二分查找
3.指针操作
----
都不难,但很基础,我觉得很好,做完了记到博客上来,题目见k&R,实现如下:
github:https://github.com/wusuopubupt/LearningC/blob/master/K%26R/chp6/keyword_count.c
1.结构体数组
2.二分查找
3.指针操作
----
都不难,但很基础,我觉得很好,做完了记到博客上来,题目见k&R,实现如下:
/* * Practice of struct array. K&R 6-1 * @author : wusuopubupt * @date : 2014-09-18 */ #include <stdio.h> #include <ctype.h> #include <string.h> #define MAXWORD 100 typedef struct key_{ char *word; int count; } key; key key_tab[] = { {"auto", 0}, {"break", 0}, {"case", 0}, {"char", 0}, {"const", 0}, {"continue", 0}, {"default", 0}, {"for", 0}, {"int", 0}, {"void", 0}, {"while", 0} }; int getword(char *word, int n); int binary_search(key key_tab[], char *word, int n); key *binary_search2(key *key_tab, char *word, int n); int getword(char *word, int n) { int c; char *w = word; while(isspace(c = getchar())) { ; } if(c != EOF) { *w++ = c; } if(!isalpha(c)) { *w = '\0'; return c; } while(n > 0) { c = getchar(); if(isalnum(c)) { *w++ = c; } else { break; } n--; } *w = '\0'; return w[0]; } int binary_search(key key_tab[], char *word, int n) { int low = 0; int high = n-1; int mid; int result; while(low <= high) { mid = (low+high) / 2; result = strcmp(word, key_tab[mid].word); if(result < 0) { high = mid-1; } else if(result > 0) { low = mid + 1; } else { return mid; } } return -1; } /* implemented with pointer */ key *binary_search2(key *key_tab, char *word, int n) { key *low = key_tab; key *high = key_tab + n-1; key *mid; int result; while(low <= high) { //mid = (low+high) / 2; /* error: can not use pointer+pointer d*/ mid = low + (high-low) / 2; /* pointer + num */ result = strcmp(word, mid->word); if(result < 0) { high = mid-1; } else if(result > 0) { low = mid + 1; } else { return mid; } } return NULL; } int main1() { int i; int n_keys = sizeof(key_tab) / sizeof(key_tab[0]); char word[MAXWORD]; while(getword(word, MAXWORD) != EOF) { if(isalpha(word[0])) { if((i = binary_search(key_tab, word, n_keys)) >= 0) { key_tab[i].count++; } } } i = 0; while(i < n_keys) { printf("%s : %d\n", key_tab[i].word, key_tab[i].count); i++; } return 0; } int main() { int n_keys = sizeof(key_tab) / sizeof(key_tab[0]); char word[MAXWORD]; key *k = NULL; while(getword(word, MAXWORD) != EOF) { if(isalpha(word[0])) { if((k = binary_search2(key_tab, word, n_keys)) != NULL) { k->count++; } } } int i = 0; while(i < n_keys) { printf("%s : %d\n", key_tab[i].word, key_tab[i].count); i++; } return 0; }
github:https://github.com/wusuopubupt/LearningC/blob/master/K%26R/chp6/keyword_count.c
相关文章推荐
- K&R练习题6-1统计关键词出现的次数
- awk统计文件中某关键词出现次数的命令
- awk以列为关键词统计出现次数
- 统计文件中关键词出现的次数
- 统计所有'单词'出现的次数
- 第十三周项目5字符串操作统计字符'A'出现的次数
- 在hadoop上进行编写mapreduce程序,统计关键词在text出现次数
- Dictionary<>练习题:统计字符串中每个字符出现的次数
- (字符串的模式匹配4.7.8)UVA 10008 What's Cryptanalysis?(统计文本中某一个字符的出现的次数,需要从小到大排序&&同次数的按字段序排序)
- 第十三周项目5-字符串的操作(统计字母 ' A ' 出现的次数)
- JDBC连接Mysql并统计指定关键词在某一列中出现的次数
- K&R《C程序设计语言》p15:统计各个数字、空白符及其他字符出现的次数
- 统计字母'A'出现的次数
- 第十四周 统计字母'A'出现的次数
- POJ 3461 Oulipo (KMP字符串匹配·统计p在s中出现次数)
- K&R_6.5用二叉树统计单词出现的次数
- awk统计文件中某关键词出现次数的命令
- 统计字母'A'出现的次数
- 在hadoop上进行编写mapreduce程序,统计关键词在text出现次数
- 读取txt文件统计文章里"java"字符串出现的次数