⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_32834.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:32834 发表者:伟子 发表日期:2003-03-15 11:38:12
<br>主题:对于你们来说简单的问题!永远感激!!(关于文件读取)
<br>内容:编译连接都没问题,程序也成功运行,但结果却是Press anything to continue...除此之外,一无所有.不知是哪里出了问题,请高人指教.<BR><BR>//该程序读取其自身的源代码作为输入用一个循环读入每一个单字,<BR>//并调用SeqSearch以确定输入是否与KeyWordTable中的保留关键<BR>//字相匹配;最后,打印出每个关键字的出现次数.<BR><BR>#include&lt;iostream.h&gt;<BR>#include&lt;fstream.h&gt;<BR>#include&lt;string.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;//使用串函数时需要<BR>#include&lt;ctype.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;//提供isalpha和isdigit两个函数<BR>#include&lt;stdlib.h&gt;<BR><BR>struct KeyWord<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;char keyword[20];<BR>&nbsp;&nbsp;&nbsp;&nbsp;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>&nbsp;&nbsp;&nbsp;&nbsp;int i;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//扫描数组。将word和当前记录中的keyword进行比较<BR>&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt;n;i++,tab++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(strcmp(word,tab-&gt;keyword)==0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return i;&nbsp;&nbsp;&nbsp;&nbsp;//若两值匹配,返回其下标值<BR>&nbsp;&nbsp;&nbsp;&nbsp;return -1;<BR>}<BR><BR>//从文件中摘录以字母开头并后跟字母或数字的词<BR>int GetWord(ifstream&amp; fin,char w[])<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;char c;<BR>&nbsp;&nbsp;&nbsp;&nbsp;int i=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//跳过非字母的输入<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(fin.get(c)&amp;&amp;!isalpha(c))<BR>&nbsp;&nbsp;&nbsp;&nbsp;;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//若到文件尾,则返回0(未找到词)<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(fin.eof())<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//保存词的第一个字母<BR>&nbsp;&nbsp;&nbsp;&nbsp;w[i++]=c;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//保存该词的后续字母和数字,并用NULL结束该串<BR>&nbsp;&nbsp;&nbsp;&nbsp;while(fin.get(c)&amp;&amp;(isalpha(c)||isdigit(c)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;w[i++]=c;<BR>&nbsp;&nbsp;&nbsp;&nbsp;w[i]='\n';<BR>&nbsp;&nbsp;&nbsp;&nbsp;return 1;&nbsp;&nbsp;&nbsp;&nbsp;//找到一个词<BR>}<BR><BR>void main(void)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;const int MAXWORD=50;&nbsp;&nbsp;&nbsp;&nbsp;//每个词的最大长度<BR>&nbsp;&nbsp;&nbsp;&nbsp;//说明关键字表的大小并赋初值<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const int NKEYWORDS=sizeof(KeyWordTable)/sizeof(KeyWord);<BR>&nbsp;&nbsp;&nbsp;&nbsp;int n;<BR>&nbsp;&nbsp;&nbsp;&nbsp;char word[MAXWORD],c;<BR>&nbsp;&nbsp;&nbsp;&nbsp;ifstream fin;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//打开文件:若出错则退出<BR>&nbsp;&nbsp;&nbsp;&nbsp;fin.open("a.cpp",ios::in|ios::nocreate);<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(!fin)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cerr&lt;&lt;"Could not open file 'a.cpp'"&lt;&lt;endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;//从文件中摘词直到文件结束<BR>&nbsp;&nbsp;&nbsp;&nbsp;while(GetWord(fin,word))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//若该词在关键字表中,则将其计数器加1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((n=SeqSearch(KeyWordTable,NKEYWORDS,word))!=-1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyWordTable[n].count++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//扫描关键字并输出其域值<BR>&nbsp;&nbsp;&nbsp;&nbsp;for(n=0;n&lt;NKEYWORDS;n++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(KeyWordTable[n].count&gt;0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;KeyWordTable[n].count;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;" "&lt;&lt;KeyWordTable[n].keyword&lt;&lt;endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;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&amp; fin,char w[])<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;char c;<BR>&nbsp;&nbsp;&nbsp;&nbsp;int i=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//跳过非字母的输入<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(fin.get(c)&amp;&amp;!isalpha(c))<BR>&nbsp;&nbsp;&nbsp;&nbsp;;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//若到文件尾,则返回0(未找到词)<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(fin.eof())<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//保存词的第一个字母<BR>&nbsp;&nbsp;&nbsp;&nbsp;w[i++]=c;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//保存该词的后续字母和数字,并用NULL结束该串<BR>&nbsp;&nbsp;&nbsp;&nbsp;while(fin.get(c)&amp;&amp;(isalpha(c)||isdigit(c)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;w[i++]=c;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>/*******************************************************/<BR>&nbsp;&nbsp;&nbsp;&nbsp;w[i]='\0';&nbsp;&nbsp; //注意这里不是'\n'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这里看到了吗?<BR>/*******************************************************/<BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;return 1;&nbsp;&nbsp;&nbsp;&nbsp;//找到一个词<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&lt;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 + -