一个用来检测文章中单词数,并统计出每个单词在文章中出现的位置,并格式化输出(文章从文件读入)。
不伦不类的程序,记录了文章中出现的单词,但却没记录单词出现的位置,一个纯粹为了输出的程序。
本来是想用结构体的,但是实验的标题是数组与串的运用,所以就做成了这样,完全没考虑执行效率,凑合用吧。
编译环境为VC++6.0
MAXN和MAXM分别限制了文章最大字数和单词数。
演示图(局部):
[img][attach]157[/attach][/img]
[mycode=c]//Code By PenguinOL@2009.04.05
#include “stdio.h”
#include “ctype.h”
#include “string.h”
#define MAXN 1000
#define MAXM 100
void simple_match(char words[],char file_con[],int word_len,int file_len)
{
int i,j,k,flag;
flag=0;
for (i=0;i<=file_len-word_len;i++)
{
for (j=0,k=i;j
{
if (flag) printf(“,”);
printf(“%d”,i+1);
i+=word_len;
flag=1;
}
}
printf(“\n”);
}
int strequ( char s1[],char s2[])
{
int i;
i=0;
while(s1[i]==s2[i]&&s1[i]!=’\0’&&s2[i]!=’\0′) i++;
if(s1[i]==’\0’&&s2[i]==’\0′)
return(1);
else
return(0);
}
int main(int argc, char* argv[])
{
FILE *fp;
char file_adr[MAXM],file_con[MAXN],words[MAXM][30];
int file_len,word_len,i,j,k,m,longest;
k=0,longest=0;
printf(“请输入文件的位置:”); //读入文件开始
gets(file_adr);
fp=fopen(file_adr,”r”);
if (!fp)
{
printf(“错误:文件打开失败!”);
return(0);
}
else
fgets(file_con,MAXN,fp); //读入文件结束
file_len=strlen(file_con);
file_con[file_len]=’\0′; //添加结束符
printf(“原文如下:\n%s\n”,file_con);
strlwr(file_con); //大写转换为小写
for (i=0;i
j=0;
while (isalpha(file_con[i]))
words[k][j++]=file_con[i++];
if (j)
{
words[k++][j]=’\0′;
if (j>longest) longest=j; //记录最长单词,用于格式化输出
}
for (m=0;m
{
k–;
break;
}
} //单词载入结束
printf(“文章长度为:%d,共有%d个单词,最长单词有%d个字母。\n”,file_len,k,longest);
for (i=0;i
word_len=strlen(words[i]);
printf(“%-*s:”,longest+5,words[i]);
simple_match(words[i],file_con,word_len,file_len);
}
}[/mycode]
源码下载(请使用VC++6.0进行编译):
[file][attach]158[/attach][/file]