版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include <iostream> #include <fstream> #include <string> #include <sstream> #include <cstdlib> #include <cctype> #include "dictionary.h" using namespace std; void lower( string& s ); string strip_punct( const string& s ); void check_spelling( ifs
2、tream& in, Dictionary& dict ); int main( int argc, char* argv ) / 如果命令行参数不对,提示错误信息 if (argc != 3) cerr << "Usage: " << argv0 << " wordlist_filename input_filen" return EXIT_FAILURE; ifstream inf(argv2); if (! inf) cerr << "Could not open "
3、; << argv2 << "n" return EXIT_FAILURE; / 开始导入字典到哈希表中 cout << "Loading dictionary, this may take awhile.n" Dictionary d(argv1); check_spelling(inf, d); inf.close(); / 调试时起暂停作用 system("pause"); return EXIT_SUCCESS; / 单词内全部字母两两交换后,在字典中查找是否正确,正确则输出,否则 / 继续
4、上述操作直到全部交换过为止 void AllLetter_Swap( int nPos, const string& word, Dictionary& dict ) / 直到单词最后一个字母,结束递归 if( nPos = word.length() ) return; string strWord; char chLetter = wordnPos; for( int j = nPos+1; j < word.length(); +j ) / 恢复原始单词值 strWord = word; / 互换指定nPos位置与其后字母 strWordnPos = strWord
5、j; strWordj = chLetter; / 字典中查找,找到输出 if( dict.search( strWord ) ) cout << "tt" << strWord << endl; / 递归调用 AllLetter_Swap( nPos+1, word, dict); / 单词内相邻两字母交换后,在字典中查找是否正确,正确则输出,否则 / 继续上述操作直到最后两字母交换过为止 void AdjacentLetter_Swap( const string& word, Dictionary& dict ) s
6、tring strWord; for( int nPos = 0; nPos < word.length()-1; +nPos ) / 恢复原始单词值 strWord = word; / 两相邻字母互换(当前字母与相邻后面一个字母互换) char chLetter = wordnPos; strWordnPos = strWordnPos+1; strWordnPos+1 = chLetter; / 字典中查找,找到输出 if( dict.search( strWord ) ) cout << "tt" << strWord <<
7、endl; / 逐次删除单词中每个字母后,在字典中查找是否正确,正确则输出 void RemoveLetter( const string& word, Dictionary& dict ) vector<string> vecWord; / 存放删除单词字母后,正确单词的数组,用于避免有重复的正确单词输出 string strWord; for( int nPos = 0; nPos < word.length(); +nPos ) / 恢复原始单词值 strWord = word; / 删除一个字母 strWord.erase( nPos, 1 ); /
8、字典中查找,找到输出 if( dict.search( strWord ) ) / 在前一次正确单词的数组中查找,如果存在的话,不再输出和压入到数组 vector<string>:iterator Iter = vecWord.begin(); for( ; Iter != vecWord.end(); +Iter ) if( (*Iter) = strWord ) break; / 否则不存在,则压入该正确单词到数组并输出 if( Iter = vecWord.end() ) vecWord.push_back( strWord ); cout << "tt
9、" << strWord << endl; / 逐次替换单词中每个字母为其它一个字母,在字典中查找是否正确,正确则输出 void ReplaceLetter( const string& word, Dictionary& dict ) string strWord; string strAlpha = "abcdefghigklmnopqrstuvwxyz" / 26个小写字母 for( int nPos = 0; nPos < word.length(); +nPos ) / 单词中逐次将每位字母用26个字母代替,
10、判断是否正确单词 for( int nAlpha = 0; nAlpha < strAlpha.length(); +nAlpha ) / 恢复原始单词值 strWord = word; / 将单词strWord中nPos位置开始的1个字母,用字母串 / strAlpha中的nAlpha位置开始的1个字母代替 strWord.replace( nPos, 1, strAlpha, nAlpha, 1 ); / 字典中查找,找到输出 if( dict.search( strWord ) ) cout << "tt" << strWord <
11、< endl; / 逐次在单词中任意位置,插入任意一个字母后,在字典中查找是否正确,正确则输出 void InsertLetter( const string& word, Dictionary& dict ) vector<string> vecWord; / 存放插入单词字母后,正确单词的数组,用于避免有重复的正确单词输出 string strWord; string strAlpha = "abcdefghigklmnopqrstuvwxyz" / 26个小写字母 for( int nPos = 0; nPos < word.l
12、ength(); +nPos ) / 单词中逐次在每个位置中插入26个字母中一个后,判断是否正确单词 for( int nAlpha = 0; nAlpha < strAlpha.length(); +nAlpha ) / 恢复原始单词值 strWord = word; / 从单词strWord中nPos位置开始,插入字母串 / strAlpha中的nAlpha位置开始的1个字母 strWord.insert( nPos, strAlpha, nAlpha, 1 ); / 字典中查找,找到输出 if( dict.search( strWord ) ) / 在前一次正确单词的数组中查找,如
13、果存在的话,不再输出和压入到数组 vector<string>:iterator Iter = vecWord.begin(); for( ; Iter != vecWord.end(); +Iter ) if( (*Iter) = strWord ) break; / 否则不存在,则压入该正确单词到数组并输出 if( Iter = vecWord.end() ) vecWord.push_back( strWord ); cout << "tt" << strWord << endl; / 单词与哈希表中字典对照,进行拼写检
14、查 void check_spelling( ifstream& in, Dictionary& dict ) int line_number = 0; while (in) line_number+; / 从测试文件中读入一行 string line; getline(in, line); / 将读入行放入stringstream中 stringstream ss (stringstream:in | stringstream:out); ss << line; / 利用stringstream将一行字符串中每一单词自动提取出来到word中 string word
15、; while (ss >> word) / 将提取出单词转成小写,并去掉可能存在的尾部标点 lower( word ); word = strip_punct( word ); / 在哈希字典里查找这个单词是否存在,存在表示该单词正确, / 直接结束本次循环,读取下一个单词重复以上操作 if( dict.search( word ) ) continue; / 否则在字典里没找到,表示该单词是错误的,输出并推荐输出可能正确的单词 cout << "line " << line_number << ": '&
16、quot; << word << "'" << endl; cout << "t" << "suggestions:" << endl; / 1. 单词中全部字母两两互换后,判断是否正确单词 / AllLetter_Swap( 0, word, dict ); / 1. 单词中相邻两字母互换后,判断是否正确单词 AdjacentLetter_Swap( word, dict ); / 2. 删除单词中单个字母后,判断是否正确单词 RemoveLetter( word, dict ); / 3. 逐次替换单词中每个字母为其它字母,判断是否正确单词 ReplaceLetter( word, dict ); / 4. 逐次在单词中任意位置,插入任意一个字母后,判断是否正确单词 InsertLetter( word
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 临床输血交叉配血技师考试试卷及答案
- 2026年高考物理临考冲刺卷01(基础卷)(全国适用)(全解全析)
- 2025年中国储备棉管理有限公司直属企业招聘73人(兰州有岗)笔试历年参考题库附带答案详解
- 2025山西地质集团有限公司物测院等3家二级子公司招聘37人笔试历年参考题库附带答案详解
- 2025安徽蚌埠市国有资本运营控股集团有限公司招聘4人笔试历年参考题库附带答案详解
- 2025四川长虹美菱股份有限公司招聘88人笔试历年参考题库附带答案详解
- 2025四川甘孜州康定市市属国有企业招聘康定市投资发展集团有限公司经理层人员笔试历年参考题库附带答案详解
- 2025北京京能清洁能源电力内蒙古分公司招聘31人笔试历年参考题库附带答案详解
- 2025内蒙古电力集团内蒙古康远监理公司成熟型电力工程监理人才招聘61人笔试历年参考题库附带答案详解
- 2025京东方科技集团股份有限公司全球校园招聘正式启动笔试历年参考题库附带答案详解
- 2026年七年级语文下册期中真题汇编 专题08 名著《骆驼祥子》
- 山东省济南市2026届高三下学期二模试题 数学 含答案
- 2026中盐甘肃省盐业(集团)有限责任公司管理人员招聘3人建设笔试模拟试题及答案解析
- 依法合规进行业务的承诺书范文4篇
- 工厂采购部绩效考核制度
- 【新教材】人教版八年级生物下册实验01 鸟卵适于在陆地上发育的结构特征(教学课件)
- 2026年中职计算机专业教师岗位实操考核试题及答案
- 深圳大疆在线测评行测题库
- 《高中生科技创新活动与综合素质评价研究》教学研究课题报告
- 组织部采购工作内控制度
- 初中英语听说读写一体化教学模式创新课题报告教学研究课题报告
评论
0/150
提交评论