其实用gets 读取整行再作处理比较容易的,在此用getc会让程序变得户复杂,容易出错
给你个例子作参考,也看看注释尝试了解吧:
#include <stdio.h>
#include <string.h>
struct WORD_FOUND //用来存放结果的结构
{
char szWord[256];
int nCount;
};
WORD_FOUND g_WordFound[100]={{"",0}};
int g_nMatch=0;
int main()
{
char szText[1024];
char szWord[512];
FILE * fp;
int i;
if ((fp=fopen("case1.in","r"))==NULL) //打开文件
{printf("wrong");return 1;} //打开不了就输出 wrong
while(fgets(szText,sizeof(szText)-1,fp)) //这里读整行,处理比较有效,不容易出错
{
char *tmp=szText,*end=szText+strlen(szText);
char *endChr;
while (tmp<end)
{
while (*tmp==' '||*tmp=='\n'||*tmp=='\t') tmp++; //这里跳过空格
endChr=tmp;
while (*endChr&&*endChr!='\n'&&*endChr!='\r'&&*endChr!=' ') endChr++;//这里寻找下个空格
memset(szWord,0,sizeof(szWord));
strncpy(szWord,tmp,endChr-tmp);//找到的字符,存在 szWord里
bool bFound=false;
for (i=0;i<g_nMatch;i++)//寻查已经找到的字符
{
if (strcmp(g_WordFound[i].szWord,szWord)==0)//如果相配
{
g_WordFound[i].nCount++;//加上1
bFound=true;
break;
}
}
if (!bFound&&strlen(szWord)>0)//如果没相配,把字符存在g_WordFound里
{
strcpy(g_WordFound[g_nMatch].szWord,szWord);
g_WordFound[g_nMatch].nCount++;
g_nMatch++;
}
tmp=endChr;
if (tmp>=end) break;
}
}
//此处打印结果
for (i=0;i<g_nMatch;i++)
{
printf("%s = %d\n",g_WordFound[i].szWord,g_WordFound[i].nCount);
}
return 0;
}