兰州大学数据结构课程设计实验七:文本文件单词的检索及计数

要求编程建立一个文本文件,每个单词不包括空格及跨行,单词由字符序列构成且区分大小写,完成以下功能:统计给定单词在文本文件中出现的总次数、检索输出某单词在文本文件中首次出现的行号及位置。

出现的问题:当选定单词是某一行最后一个单词时,记录行数的计数器会多记录一次行数.

编程环境是codeblocks,编译器是GUN-GCC,操作系统是win7-64

编写者:兰州大学2013级计算机系hsy

#include<stdio.h>
#include <stdlib.h>
char* Newfile();
int Index();

char* Newfile()//建立一个新的文本文档,并将输入内容写入文本中
{
    FILE *fp;
    char ch,filename[10];
    printf("请输入文件名:(包括拓展名)\n");
    scanf("%s",filename);
    fp=fopen(filename,"w+");
    ch=getchar();
    printf("请输入单词:(请以$符号结束)\n");
    while(ch!='$')
    {
        ch=getchar();
        fputc(ch,fp);
     }
    fclose(fp);
    return filename;
}

int Index(char* p)//朴素模式匹配算法
{
    FILE *fp;
    if((fp=fopen(p,"r"))==NULL)
    {

        printf("找不到文件\n");
        exit(0);
    }
    //将文件读取到一维数组当中
    char S[100],T[20];
    char ch1,ch2;

    ch1=fgetc(fp);
    int i=0;//i用于记录主串的长度

    while(ch1!='$')
    {
        S[i]=ch1;
        ch1=fgetc(fp);
        i++;
    }
    S[i]='$';

    //建立子串
    printf("请输入你选择的单词:\n");
    ch2=getchar();
    ch2=getchar();
    int j=0;//j用于记录输入的子串的长度
    while(ch2!='\n')
    {
        T[j]=ch2;
        ch2=getchar();

        j++;
    }
    //朴素模式匹配算法实现
    int row,col;//row为列,col为行
    row=1;
    col=1;
    int m,n,q;//m为S的下标,n为T的下标,q用于换行时记录m的值
    m=0;
    n=0;
    q=1;
    int num=0;//num用于记录选定单词出现的次数
    while(m< jbr>    {

        if(S[m]==T[n])
        {
            m++;
            n++;
        }
        else
        {
            m=m-n+1;
            n=0;

        };

        if(n==j)
        {
            num++;
            if(col==1)
            {
                row=m-n+1;
                printf("第%d个单词出现的位置是第%d行第%d个\n",num,col,row);
            }
            else
            {
                row=m-n-q;
                printf("第%d个单词出现的位置是第%d行第%d个\n",num,col,row);
            }


        }
        if(S[m]=='\n')
        {
            col++;
            q=m;
        };


        if(S[m]=='$')
            {
                printf("所选单词出现的次数是%d\n",num);
            }
    }

 


}

int main()
{
    char *p;//p用于记录和传递传递用户输入的文件名
    p=Newfile();
    Index(p);

}



来源: 心倾城的网易博客

欢迎分享本文,转载请保留出处!

你可能感兴趣的:(兰州大学数据结构课程设计实验七:文本文件单词的检索及计数)