C语言 文件单词的检索与计数
来源:互联网 发布:saa7134hl采集卡软件 编辑:程序博客网 时间:2024/05/16 08:09
1.设计要求与分析
建立一个文本文件,每个单词不包含空行且不跨行。检索单词的出现的行数,与位置。
2.具体设计
2.1建立文本文件
2.1.1定义一个串变量
typedef struct{char cACh[MAXSIZE];int iLenght;}SEQSTR;
这是一个顺序串
void fileCreate ( ){int i;SEQSTR STR;char cFileName[10],cContinueFlg;FILE *fp;printf("输入要建立的文件名:");scanf("%s",cFileName);fp = fopen(cFileName,"w");cContinueFlg = 'n';while (cContinueFlg == 'n'||cContinueFlg == 'N') {printf("输入一行文本 \n");getchar();gets(STR.cACh);strcat(STR.cACh,"\n");STR.iLenght=strlen(STR.cACh);for (i = 0; i < STR.iLenght; i++) {fwrite(&STR.cACh[i],sizeof(char),1,fp);}printf("结束吗?y or n:");cContinueFlg=getchar();}fclose(fp);printf("建立文件结束!\n");}
1.输入文件名,打开该文件
2.循环读入到该文件过程如下
While(不是文件的输入结束){
读入一文本进入串变量;
串变量写入文件;
输入是否为结束的标志;
}
2.2检索单词的出现的位置
2.2.1串的匹配算法
从主串(顺序存储结构)的第k个字符起首次与匹配串相同的起始位置。
int stringMatch ( SEQSTR STRMaster, SEQSTR STRMatch, int iInitPos) {int iMaster,iMatch;iMaster = iInitPos - 1;iMatch = 0;while (iMaster < STRMaster.iLenght && iMatch < STRMatch.iLenght) {if (STRMaster.cACh[iMaster] == STRMatch.cACh[iMatch]) {iMaster++;iMatch++;}else {iMaster = iMaster - iMatch +1;iMatch = 0;}}if (iMatch >= STRMatch.iLenght)return iMaster+1-STRMatch.iLenght;elsereturn -1;}
iMaster,iMatch;是扫描的变量,在未完成主串与匹配串的扫描时,当出现相同的字符时两者都会自加,一旦发现不同的立马回到主串的起始位置的下一个的位置,匹配串的扫描变量立马清零。扫描完了,返回主串存在匹配串的起始位置。
2.2.2单词的检索
1.输入要检索的文件名,并打开
2.输入要检索的单词
3.行计数器清0
4.While(不是文件的结尾) {
读入一行到指定的主串中;
求出串的长度;
行单词计数器置0;
检索的位置置1为初始的位置;
While(初始化检索的位置<主串的长度) {
调用串匹配函数,得到位置;
有的话,单词计数器+1,在这串中先保留起来它的位置;
接着下一个的检索;
}
检索完这行,如果有单词,就输出;
}
void wordRetrieval() {FILE *fp;SEQSTR STRMaster,STRSlave;char cAFileName[10];int i,j,k,l,m;int iASiteStore[20];printf("输入的文件名:");scanf("%s",cAFileName);fp = fopen(cAFileName,"r");printf("输入要搜索的单词:");scanf("%s",STRSlave.cACh);STRSlave.iLenght=strlen(STRSlave.cACh);l=0;while (0==feof(fp)) {fgets(STRMaster.cACh,sizeof(STRMaster.cACh),fp);//文件读一个字符串STRMaster.iLenght=strlen(STRMaster.cACh); if (feof(fp)) break;l++;k=1;i=0;while (k < STRMaster.iLenght) {j = stringMatch(STRMaster,STRSlave,k);if (j < 0)break;else {i++;iASiteStore[i] = j;k = j + STRSlave.iLenght;}}if (i > 0) {printf("行号:%d次数:%d,位置分别是:",l,i);for ( m = 1; m <= i; m++)printf("%4d",iASiteStore[m]);printf("\n");}elseprintf("没找到");}}
整个源代码
// wordRetrieval.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "stdio.h"#include "stdlib.h"#include "string.h"#define MAXSIZE 256typedef struct{char cACh[MAXSIZE];int iLenght;}SEQSTR;typedef SEQSTR *qSEQSTR;int stringMatch ( SEQSTR STRMaster, SEQSTR STRMatch, int iInitPos) {int iMaster,iMatch;iMaster = iInitPos - 1;iMatch = 0;while (iMaster < STRMaster.iLenght && iMatch < STRMatch.iLenght) {if (STRMaster.cACh[iMaster] == STRMatch.cACh[iMatch]) {iMaster++;iMatch++;}else {iMaster = iMaster - iMatch +1;iMatch = 0;}}if (iMatch >= STRMatch.iLenght)return iMaster+1-STRMatch.iLenght;elsereturn -1;}void fileCreate ( ){int i;SEQSTR STR;char cFileName[10],cContinueFlg;FILE *fp;printf("输入要建立的文件名:");scanf("%s",cFileName);fp = fopen(cFileName,"w");cContinueFlg = 'n';while (cContinueFlg == 'n'||cContinueFlg == 'N') {printf("输入一行文本 \n");getchar();gets(STR.cACh);strcat(STR.cACh,"\n");STR.iLenght=strlen(STR.cACh);for (i = 0; i < STR.iLenght; i++) {fwrite(&STR.cACh[i],sizeof(char),1,fp);}printf("结束吗?y or n:");cContinueFlg=getchar();}fclose(fp);printf("建立文件结束!\n");}void wordRetrieval() {FILE *fp;SEQSTR STRMaster,STRSlave;char cAFileName[10];int i,j,k,l,m;int iASiteStore[20];printf("输入的文件名:");scanf("%s",cAFileName);fp = fopen(cAFileName,"r");printf("输入要搜索的单词:");scanf("%s",STRSlave.cACh);STRSlave.iLenght=strlen(STRSlave.cACh);l=0;while (0==feof(fp)) {fgets(STRMaster.cACh,sizeof(STRMaster.cACh),fp);//文件读一个字符串STRMaster.iLenght=strlen(STRMaster.cACh); if (feof(fp)) break;l++;k=1;i=0;while (k < STRMaster.iLenght) {j = stringMatch(STRMaster,STRSlave,k);if (j < 0)break;else {i++;iASiteStore[i] = j;k = j + STRSlave.iLenght;}}if (i > 0) {printf("行号:%d次数:%d,位置分别是:",l,i);for ( m = 1; m <= i; m++)printf("%4d",iASiteStore[m]);printf("\n");}elseprintf("没找到");}}int main(int argc, char* argv[]){int iChoose;//printf("Hello World!\n");while(1) {scanf("%d",&iChoose);switch (iChoose) {case 1:fileCreate();break;case 2:wordRetrieval();break;}}return 0;}
0 0
- C语言 文件单词的检索与计数
- 基于C语言的文本文件单词的检索与计数
- 文本文件单词的检索与计数
- c语言 单词计数
- 文本文件单词的检索及计数
- C语言二叉排序树单词计数程序实现
- C语言实现对输入中的行数,单词个数,字符的个数进行计数
- C语言用二叉树实现对输入各个单词的个数进行计数
- 基于C语言的航班信息的查询与检索
- 统计文件中每个单词的个数--C语言实现
- C语言的引用计数与对象树
- 检索单词的个数
- 兰州大学数据结构课程设计实验七:文本文件单词的检索及计数
- C语言实现文件单词统计
- C语言:文件操作之单词统计
- C++读取文件单词计数
- 计数排序的C语言实现
- 单词计数的mapreduce原理
- 栈和数组
- PHP读取网页文件内容的实现代码(fopen,curl等)
- Java 8/27
- mysql各版本编译安装
- 汇编指令状态寄存器访问指令(MRS,MSR)
- C语言 文件单词的检索与计数
- intents 和 intent过滤器(一)
- 了解mysql的源码目录及源文件
- Android中自定义控件的步骤
- 如何处理北京自考报名ie浏览器无法弹出易宝支付网页
- SVN用户权限配置
- 稳定婚姻问题专题小结(二分图匹配 稳定婚姻问题--延迟拒绝算法(Gale-Shapley 算法))
- Android webView显示完成后截图
- 2 趋势