您的位置:首页 > 其它

第 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 }。

代码实现

#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;
}


运行测试

  测试所用字典文件:

  


  运行结果:

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: