gdghfkgfjrfgr 2021-06-22 23:23 采纳率: 50%
浏览 105
已结题

文本编辑系统的设计与实现

13.简易文本编辑系统的设计与实现
基本要求:输入一页文字,可以统计出文字、数字、空格的个数。
(1)利用外部.txt文件存储一页文章,每行最多不超过80个字符,共N行。
(2)分别统计出其中英文字母和空格数及整篇文章总字数。
(3)统计某一字符串在文章中出现的次数,并输出该次数。 
(4)删除某一子串,并将后面的字符前移,对文章的修改,同步到.txt文件中。
提高部分:采用顺序和链式两种存储结构实现。

 

  • 写回答

1条回答 默认 最新

  • qfl_sdu 2021-06-23 00:55
    关注

    代码如下,如有帮助,请采纳一下,谢谢。

    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    
    #define N 20
    
    //查找big中出现smal的次数
    void findstr(char*big ,char* smal,int pos[],int *nmb)
    {
    	int i,j,lenb,lens;
    	lenb = strlen(big);
    	lens = strlen(smal);
    	*nmb = 0;
    	if(lens > lenb)
    		return;
    
    	i = 0;
    	while(i < lenb-lens+1)
    	{
    		for (j = 0; j < lens;j++)
    		{
    			if(tolower(big[i+j]) != tolower(smal[j])) //不区分大小写,如果区分大小写,则去掉tolower
    				break;
    		}
    		if (j == lens) //说明找到
    		{
    			pos[*nmb] = i;
    			(*nmb)++;
    			i += lens;
    		}else
    			i++;
    	}
    }
    
    int main()
    {
    	int row = 0;//文本实际的行数
    	FILE* fp;   //文件指针
    	char buf[N][100]={0}; //缓存每行文本数据
    	
    	int nmbZm = 0,nmbSz = 0,nmbSpace = 0,total = 0;//字母数、数字数、空格数、总字符数
    
    	int times = 0; //某个单词出现的次数
    	int pos[100];  //记录单词出现的位置
    	char smal[20]={0};//需要查找的字符串
    
    	int i,j,tmp = 0;//临时变量
    	char hc[100]={0};//临时变量--删除字符串时使用
    	
    	if (!(fp= fopen("a.txt","r")))
    	{
    		printf("文件打开失败\n");
    		return 0;
    	}
    	printf("开始读文件...\n");
    	while(!feof(fp))
    	{
    		memset(buf[row],0,100);
    		fgets(buf[row],100,fp);//逐行读取文件
    		row++;		
    	}
    	fclose(fp);
    
    	//1.统计英文字母、数字、空格、总文本长度
    	for (i = 0;i<row;i++)
    	{
    		total += strlen(buf[i]);
    		for(j=0;j<strlen(buf[i]);j++)
    		{
    			if( (buf[i][j]>= 'a' && buf[i][j] <='z') || (buf[i][j]>= 'A' && buf[i][j] <='Z') )
    				nmbZm++;
    			else if(buf[i][j]>= '0' && buf[i][j] <='9')
    				nmbSz++;
    			else if(buf[i][j] == ' ')
    				nmbSpace++;
    		}
    	}
    
    	printf("字母的个数:%d\n",nmbZm);
    	printf("数字的个数:%d\n",nmbSz);
    	printf("空格的个数:%d\n",nmbSpace);
    	printf("文本总字符数:%d\n",total);
    
    	//2.查询某个字符出现的次数
    	printf("请输入要查找的字符串:");
    	scanf("%s",smal);
    	for (i = 0;i<row;i++)
    	{
    		findstr(buf[i],smal,pos,&tmp);
    		times += tmp;
    	}
    	printf("%s出现的次数:%d\n",smal,times);
    
    	//3.删除某个字符串(删除所有行中出现的字符串),并写入文件
    	if(!(fp = fopen("a.txt","w")))
    	{
    		printf("文件打开失败\n");
    		return 0;
    	}
    	memset(smal,0,20);
    	printf("请输入需要删除的字符串:");
    	scanf("%s",smal);
    	for (i=0;i<row;i++)
    	{
    		findstr(buf[i],smal,pos,&tmp);
    		tmp--;
    		while(tmp>=0)
    		{
    			memcpy(buf[i]+pos[tmp],buf[i]+pos[tmp]+strlen(smal),strlen(buf[i])- strlen(smal) - pos[tmp]);
    			tmp--;
    			buf[i][strlen(buf[i])- strlen(smal)] = '\0';
    		}
    		//
    		fputs(buf[i],fp);
    	}
    	fclose(fp);
    
    	return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月29日

悬赏问题

  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?