陷入死循环...
但我找不出原因...
可能每个人都会觉得自己的思路比较正确...
InFile是读入文本//每读一行,如果找到该字串,频率+1,同时把该字串及其之前内容删除,再重新回到文件开头读入一行
//(因为不能假设该字串只在该行出现一次)。
//如果没有找到该字串,并且没到文件结尾,往下再读一行。int CStrInfo::StrFreq(CString str,LPCTSTR StrFileName,LPCTSTR OutFileName)//计算字串频率
{
int freq=0; //初始化字串频率为0
CStdioFile InFile;InFile.Open(StrFileName,CFile::modeRead,NULL);//打开文件InFile
OutFile.Open(OutFileName,CFile::modeCreate|CFile::modeWrite,NULL);//打开文件OutFileint strlen=str.GetLength();//字串长
CString InStr;
int pos;
while(InFile.ReadString(InStr))//如果没有到文件末尾,往下读一行,
{
pos=InStr.Find(str);//pos保存该字串位置
if(pos!=-1)
{//如果找到该字串
freq++;//将字串频率加1
InStr.Delete(0,pos+strlen);//删除该字串及之前的内容
InFile.SeekToBegin();//文件指针返回文件开头
};
};

解决方案 »

  1.   

    你的文件对象是一个单独的。你删除的是InStr中的数据。所以你调用InFile.SeekToBegin(),后文件指针回到了文件的开始。文件对象中的数据没有什么变化。所以之前的动作又重复了。肯定是死循环。
      

  2.   

    InFile.SeekToBegin();//文件指针返回文件开头 
    为什么要有这个?
    没有该字符串,则分析下一个嘛
      

  3.   

    上面忘记说了,你不应该是调用SeekToBegin,而是应该将文件指针移到找到的字符串后面。