人生如逆旅,我亦是行人!江湖人称wsjjeremy.blog.chinaunix.net
ubuntuer
全部博文(930)
intern(3)
string(19)
正则表达式(5)
2011年(60)
2010年(220)
2009年(371)
2008年(279)
baocheng
nba76ers
renjian2
qq576709
mcn304
zibuyule
西农魔峰
曾德标
zhuqing_
shanck
tendy
moshangx
wb123456
smile124
hjshajsh
chenhong
bzhao
python16
分类: C/C++
2008-11-04 21:49:02
第三题(共四题100分):字符串替换(30分) 题目描述:请编写程序,根据指定的对应关系,把一个文本中的字符串替换成另外的字符串。 输入数据:程序读入已被命名为text.txt和dict.txt的两个输入数据文本文件,text.txt为一个包含大量字符串(含中文)的文本,以whitespace为分隔符;dict.txt为表示字符串(s1)与字符串(s2)的对应关系的另一个文本(含中文),大约在1万行左右,每行两个字符串(即s1和s2),用一个\t或空格分隔。dict.txt中各行的s1没有排序,并有可能有重复,这时以最后出现的那次s1所对应的s2为准。text.txt和dict.txt中的每个字符串都可能包含除whitespace之外的任何字符。text.txt中的字符串必须和 dict.txt中的某s1完全匹配才能被替换。(为便于调试,您可下载测试text.txt和dict.txt文件,实际运行时我们会使用不同内容的输入文件。) 输出数据:在标准输出上打印text.txt被dict.txt替换后了的整个文本。 评分标准:程序输出结果必须正确,内存使用越少越好,程序的执行时间越快越好。 我的程序: #pragma warning(disable:4786) #include <string> #include <map> #include <fstream> #include <cassert> #include <cstdio> using namespace std; map< string, string > dict; void loadDict(const char *filename) { string a, b; ifstream dic; assert(filename != NULL); dic.open(filename); while(dic>>a>>b) { dict[a] = b; } dic.close(); } const char *replaceWord(const string &word) { map< string, string >::iterator word2 = dict.find(word); if (word2 == dict.end()) { return word.c_str(); } else { return word2->second.c_str(); } } int main() { bool isChinese = false; char c; string word; loadDict("dict.txt"); FILE *fp = fopen("text.txt", "rt"); while(!feof(fp)) { c = fgetc(fp); if (isChinese) { word += c; isChinese = false; } else { if ((c & 0x80) == 0 && isspace(c)) { if (!word.empty()) { printf("%s", replaceWord(word)); word = ""; } printf("%c", c); } else { if (c & 0x80) { isChinese = true; } word += c; } } } fclose(fp); if (!word.empty()) { printf("%s", replaceWord(word)); } return 0; }
上一篇:百度之星2005 第二题【转】
下一篇:学不进去了?~科学教你“长记性”!
登录 注册