成语大全网 - 汉语词典 - c语法词典

c语法词典

其实用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;

}