- #include<stdio.h>
- #include<string.h>
- #include<ctype.h>
- void main()
- {
- char word[1000][20]; /*定义一个存放单词的二维数组*/
- int a[100],b[100];
- char t[15];
- int count;
- char ch;
- int i,j,m,k;
- FILE *file1,*file2;
- file1=fopen("wordin.txt","r"); /* 指针f1用于打开源文件wordin.txt */
- fscanf(file1,"%c",&ch); /* 接收第一个当前文件的字符. */
- for(i=0;i<=100;i++)
- { a[i]=0; /*第i个单词重复出现的次数*/
- b[i]=i; /*相当于单词序号*/
- }
- count=-1;
- while(!feof(file1))/* 检测是否到达文件结末尾从而执行循环 */
- {
- strcpy(t,""); /* 初始化用于临时存储单词的变量t */
- while(isalpha(ch)) /* 循环条件为当前字符是英文字母 */
- {
- ch=tolower(ch); /* 将得到的字符转换为小写 */
- j=strlen(t); /* 更新当前单词的长度 */
- t[j]=ch;t[j+1]='';
- fscanf(file1,"%c",&ch); /* 继续读取下一个字符 */
- }
- m=-1;
- for(i=0;i<=count;i++)
- if(strcmp(word[i],t)==0)
- {a[i]++;m=1;break;} /* 检索已经存入的单词,若有与当前单词相同则将其数量a[i]的值+1,同时将是否相同的记号m置为1 */
- if (m==-1)
- {count++;strcpy(word[count],t);a[count]=1;} /* 若经上面的循环没有与当前单词相同者则将新单词存入word并将其数量置为1 */
- while((!isalpha(ch))&&(!feof(file1)))
- fscanf(file1,"%c",&ch); /* 若当前字符并非英文字母也不是文件结尾标志直接跳过,不存储 */
- } /* 单词搜索并统计结束 */
-
- for(i=0;i<count;i++)
- for(j=i+1;j<=count;j++)
- if(strcmp(word[b[i]],word[b[j]])>0)
- {
- k=b[i];
- b[i]=b[j];
- b[j]=k;
- }
- file2=fopen("wordout.txt","w"); /* 指针f2用于输出结果文件wordout.txt */
- fprintf(file2,"%dn",count+1); /* 以下内空皆为输出 */
- for(i=0;i<=count;i++)
- fprintf(file2,"%s %dn",word[b[i]],a[b[i]]);
- fclose(file1); /* 关闭文件 */
- fclose(file2);
- }