📄 subject_32834.htm
字号:
<p>
序号:32834 发表者:伟子 发表日期:2003-03-15 11:38:12
<br>主题:对于你们来说简单的问题!永远感激!!(关于文件读取)
<br>内容:编译连接都没问题,程序也成功运行,但结果却是Press anything to continue...除此之外,一无所有.不知是哪里出了问题,请高人指教.<BR><BR>//该程序读取其自身的源代码作为输入用一个循环读入每一个单字,<BR>//并调用SeqSearch以确定输入是否与KeyWordTable中的保留关键<BR>//字相匹配;最后,打印出每个关键字的出现次数.<BR><BR>#include<iostream.h><BR>#include<fstream.h><BR>#include<string.h> //使用串函数时需要<BR>#include<ctype.h> //提供isalpha和isdigit两个函数<BR>#include<stdlib.h><BR><BR>struct KeyWord<BR>{<BR> char keyword[20];<BR> int count;<BR>};<BR><BR>KeyWord KeyWordTable[]=<BR>{{"else",0},{"for",0},{"if",0},{"include",0},{"while",0}};<BR><BR>//查找字符串的顺序查找算法<BR>int SeqSearch(KeyWord* tab,int n,char* word)<BR>{<BR> int i;<BR> //扫描数组。将word和当前记录中的keyword进行比较<BR> for(i=0;i<n;i++,tab++)<BR> if(strcmp(word,tab->keyword)==0)<BR> return i; //若两值匹配,返回其下标值<BR> return -1;<BR>}<BR><BR>//从文件中摘录以字母开头并后跟字母或数字的词<BR>int GetWord(ifstream& fin,char w[])<BR>{<BR> char c;<BR> int i=0;<BR> //跳过非字母的输入<BR> while(fin.get(c)&&!isalpha(c))<BR> ;<BR> //若到文件尾,则返回0(未找到词)<BR> if(fin.eof())<BR> return 0;<BR><BR> //保存词的第一个字母<BR> w[i++]=c;<BR> //保存该词的后续字母和数字,并用NULL结束该串<BR> while(fin.get(c)&&(isalpha(c)||isdigit(c)))<BR> w[i++]=c;<BR> w[i]='\n';<BR> return 1; //找到一个词<BR>}<BR><BR>void main(void)<BR>{<BR> const int MAXWORD=50; //每个词的最大长度<BR> //说明关键字表的大小并赋初值<BR> const int NKEYWORDS=sizeof(KeyWordTable)/sizeof(KeyWord);<BR> int n;<BR> char word[MAXWORD],c;<BR> ifstream fin;<BR> //打开文件:若出错则退出<BR> fin.open("a.cpp",ios::in|ios::nocreate);<BR> if(!fin)<BR> {<BR> cerr<<"Could not open file 'a.cpp'"<<endl;<BR> exit(1);<BR> }<BR> //从文件中摘词直到文件结束<BR> while(GetWord(fin,word))<BR> //若该词在关键字表中,则将其计数器加1<BR> if((n=SeqSearch(KeyWordTable,NKEYWORDS,word))!=-1)<BR> KeyWordTable[n].count++;<BR> //扫描关键字并输出其域值<BR> for(n=0;n<NKEYWORDS;n++)<BR> if(KeyWordTable[n].count>0)<BR> {<BR> cout<<KeyWordTable[n].count;<BR> cout<<" "<<KeyWordTable[n].keyword<<endl;<BR> }<BR> fin.close();<BR>}<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:sdfsd 回复日期:2003-03-15 13:37:25
<br>内容:这个函数里有个小错误,改了就可以了:<BR><BR>//从文件中摘录以字母开头并后跟字母或数字的词<BR>int GetWord(ifstream& fin,char w[])<BR>{<BR> char c;<BR> int i=0;<BR> //跳过非字母的输入<BR> while(fin.get(c)&&!isalpha(c))<BR> ;<BR> //若到文件尾,则返回0(未找到词)<BR> if(fin.eof())<BR> return 0;<BR><BR> //保存词的第一个字母<BR> w[i++]=c;<BR> //保存该词的后续字母和数字,并用NULL结束该串<BR> while(fin.get(c)&&(isalpha(c)||isdigit(c)))<BR> w[i++]=c;<BR> <BR>/*******************************************************/<BR> w[i]='\0'; //注意这里不是'\n' 这里看到了吗?<BR>/*******************************************************/<BR> <BR> return 1; //找到一个词<BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:王浩 回复日期:2003-03-17 13:05:34
<br>内容:看一下你最后的输出循环for(n=0;n<NKEYWORDS;n++),应该只能循环一次,如果你的文章中没有出现过else,肯定没有任何输出。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -