第 2 章 第 1 题 同位词问题 上问 数组实现
2014-03-27 15:09
148 查看
问题分析
输入:一个任意的单词和一个内含多个乱序单词的字典文件
输出:该单词在字典中的所有同位词
约束:无
解决思路
一一比对输入单词和字典中各个单词的标识符,如果相同则输出字典中的单词。标识符为一个内含26个整型元素数组,数组中的各个元素表示其对应的字母在其对应单词中出现的次数。比如 aabc 的标识符就是{ 2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }。
代码实现
运行测试
测试所用字典文件:
运行结果:
输入:一个任意的单词和一个内含多个乱序单词的字典文件
输出:该单词在字典中的所有同位词
约束:无
解决思路
一一比对输入单词和字典中各个单词的标识符,如果相同则输出字典中的单词。标识符为一个内含26个整型元素数组,数组中的各个元素表示其对应的字母在其对应单词中出现的次数。比如 aabc 的标识符就是{ 2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }。
代码实现
#include <iostream> #include <fstream> #include <string> using namespace std; #define MAX 26 /* * 获取单词word的标识符并存入参数数组 */ void getID(string word, int array[]) { for (int i=0; i<MAX; i++) { array[i] = 0; } for (string::size_type i=0; i<word.length(); i++) { array[word[i]-97]++; } } /* * 比较单词的标识符 */ int compareID(int a[], int b[]) { for (int i=0; i<MAX; i++) { if (a[i] != b[i]) return 0; } return 1; } int main() { /* * a存放查询单词的标识符,b存放其比对对象单词的标识符 */ int a[MAX]; int b[MAX]; /* * 打开字典文件 */ string filename; cout << "请输入字典文件名( 当前目录下 ): "; cin >> filename; fstream io; io.open(filename.c_str()); if (!io) { cout << "打开文件失败" << endl; return 1; } /* * 获取查询单词及其标识符 */ string word; cout << "请输入查询单词: "; cin >> word; getID(word, a); /* * 遍历字典文件并打印输入单词的所有同位词 */ string tem; cout << "单词 \"" << word << "\" 的同位词如下:" << endl; while (io >> tem) { getID(tem, b); if ( compareID(a, b) ){ cout << tem << " "; } } cout << endl; // 关闭文件指针 io.close(); return 0; }
运行测试
测试所用字典文件:
运行结果:
相关文章推荐
- 第 3 章 第 1 题 精简冗余 if 语句问题 使用数组实现
- 第 2 章 第 1 题 同位词问题 下问 Multimap实现
- 最大子数组问题-GoLang实现
- 约瑟夫问题(丢手帕问题)的数组实现
- 背包问题 动态规划 滚动数组实现
- 最大子数组问题-c++代码实现及运行实例结果
- 约瑟夫问题---数组实现
- 第 2 章 第 3 题 数组旋转问题 平移算法实现2
- 算法导论之最大子数组问题 C语言实现
- 约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
- 雇佣问题随机排列数组(permuteBySorting)-c++代码实现及运行实例结果
- 数组实现的约瑟夫问题(Java)
- 最大子数组问题(分治策略实现)
- 从n个数组中任意选取一个元素的所有组合的Java实现(组合问题)
- 【算法——Python实现】滑动窗口解决数组问题
- 各位大牛帮忙看看问题出来哪?自己实现一个数组模板类,编译无法通过
- 约瑟夫环问题的两种实现[链表+数组]
- 数组实现的约瑟夫问题(Java)
- 最大子数组问题-c++代码实现及运行实例结果
- 第 1 章 第 9 题 使用未初始化数组问题 设立辅助数组实现