主要是CalcWord和WriteWord 函数,仔细研究吧,别浪费我的心血:
创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站建设、成都做网站、卫滨网络推广、重庆小程序开发、卫滨网络营销、卫滨企业策划、卫滨品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供卫滨建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
#include stdio.h
#include conio.h
#include string.h
#include ctype.h
#include math.h
struct WORD_FOUND
{
char szWord[256];
int nCount;
};
WORD_FOUND g_WordFound[1000]={{"",0}};
int g_nMatch=0;
int CalcWord(char *szFile)
{
char szText[1024];
char szWord[512];
FILE * fp;
int i;
if ((fp=fopen(szFile,"r"))==NULL)
{
printf("file not found");
return -1;
}
while(fgets(szText,sizeof(szText)-1,fp))
{
char *tmp=szText,*end=szText+strlen(szText);
char *endChr;
while (tmpend)
{
while ((*tmp==' '||*tmp=='\n'||*tmp=='\t'||!isalpha(*tmp))*tmp) tmp++;
endChr=tmp;
while (*endChr*endChr!='\n'*endChr!='\r'*endChr!=' ')
{
if (!isalpha(abs(*endChr)))
break;
endChr++;
}
memset(szWord,0,sizeof(szWord));
strncpy(szWord,tmp,endChr-tmp);
bool bFound=false;
for (i=0;ig_nMatch;i++)
{
if (strcmp(g_WordFound[i].szWord,szWord)==0)
{
g_WordFound[i].nCount++;
bFound=true;
break;
}
}
if (!bFoundstrlen(szWord)0)
{
strcpy(g_WordFound[g_nMatch].szWord,szWord);
g_WordFound[g_nMatch].nCount++;
g_nMatch++;
}
tmp=endChr;
if (tmp=end) break;
}
}
return 0;
}
int WriteWord(char *szFile,int nAppearance)
{
int i;
FILE *file=fopen(szFile,"w");
if (!file) return -1;
for (i=0;ig_nMatch;i++)
{
if (g_WordFound[i].nCount=nAppearance)
{
fwrite(g_WordFound[i].szWord,1,strlen(g_WordFound[i].szWord),file);
fwrite("\n",1,1,file);
printf("%s = %d\n",g_WordFound[i].szWord,g_WordFound[i].nCount);
}
}
if (file) fclose(file);
return 0;
}
int main()
{
int i;
if (CalcWord("in.txt")!=0)
{
printf("Calculate word failed\n");
return 0;
}
WriteWord("out.txt",10);
for (i=0;ig_nMatch;i++)
{
printf("%s = %d\n",g_WordFound[i].szWord,g_WordFound[i].nCount);
}
getch();
return 0;
}
先解释一下筛选法的步骤:
1 先将1挖掉(因为1不是素数)。
2 用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。
3 用3去除它后面的各数,把3的倍数挖掉。
4 分别用5…各数作为除数去除这些数以后的各数。
上述操作需要一个很大的容器去装载所有数的集合,只要满足上述条件,即2的倍数大于1的全部置0,3的倍数大于1的全部置0,4的倍数大于1的全部置0.。。。一直到这个数据集合的末尾,这样一来不为0的数就是素数了,然后按下标在里面进行查找就好了
#includelt;stdio.hgt;
#includelt;math.hgt;
int main()
{
int i,j,k=0,a[100];
for(i=0;ilt;100;i++)
{
alt;igt;=i+1;//将1~100赋值给a[0]~a[99]
}
a[0]=0;//先把a[0]赋值为0
for(i=0;ilt;99;i++)
{
for(j=i+1;jlt;100;j++)
{
if(alt;igt;!=0a[j]!=0)
{
if(a[j]%alt;igt;==0)
{
a[j]=0;//把不是素数的都赋值为0
}
}
}
}
printf("筛选法求出100以内的素数为:\n");
for(i=0;ilt;100;i++)
{
if(alt;igt;!=0)//选出值不为0的数,即素数
{
printf("%4d",alt;igt;);
k++;
}
if(k%10==0)//输出10个数后换行
{
printf("\n");
}
}
printf("\n");
return 0;
}
运行效果:
扩展资料:
在c语言中产生格式化输出的函数(定义在 stdio.h 中),其向未重定向终端(显示器、控制台等)输出字符。
Format 参数是包含三种对象类型的一个字符串:
* 无格式字符复制到输出流;
* 转换规范,每个规范导致在值参数列表中检索 1 个或更多个项;
* 转义序列。
通常意义上format的格式如下:
%[flags][width][.prec][F|N|h|l]type
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款