C语言 数据结构基础 串的应用---文本处理系统

        将文本看作一个大的字符串,文本处理也就是对字符串的处理。文本处理的实质就是修改字符数据的形式和格式,虽然各个文本编辑程序功能不同,但基本操作就是串的查找,插入,修改等。

        这里采用堆串结构,将整个文本看作一个字符串存放在堆区对其进行处理,不灵活,只能实现一些基本操作。

实现如下:

        在堆串的基础操作上,只需要利用堆串的函数,实现以下操作,就可以

字符统计

enum MyEnum
{
	shu=0,symbol,letter,words,sentence,all   // 数字,符号,字母,单词,句子
};

// 05-各类字符数目统计
void Tongji(string* L) {
	int Num[6] = { 0 };     // 设置数组存放各类字符的数目
	int now = 0;
	for (int i = 0; i < L->len; ++i) {  // 遍历整个字符串
		if (L->S[i] >= '0' && L->S[i] <= '9') { // 如果字符串是数字,数字++
			++Num[shu];
			
		}
		else if ((L->S[i] >= 'A'&&L->S[i]<='Z')||(L->S[i] >= 'a' && L->S[i] <= 'z')) { // 如果字符串是字母,字母++
			++Num[letter];                      // zimu ++
			if (!((L->S[i+1] >= 'A' && L->S[i+1] <= 'Z') || (L->S[i+1] >= 'a' && L->S[i+1] <= 'z')) ){ // 如果字母后有符号,就划分为单词
				++Num[words];                   // danci ++
			}
		}                                                     // 有 遇到句号,问好,感叹号这些表示句子结束的标点,句子数目++
		else if(L->S[i]=='.'||L->S[i]=='?'||L->S[i]=='!') {  // juzi ++
			++Num[sentence];
			++Num[symbol];                                   // fuhao ++
		}
		else if (L->S[i] != ' '){ // 是个符号就增加符号数目
 			++Num[symbol];                                   //  fuhao ++ 
		}
		if (L->S[i] != ' ') {     // 是个空格就增加空格数目
			++Num[all];                                       // zifu ++
		}
	}
	printf("统计结果如下:\n");
	printf("有%d个单词,%d个句子,%d个字母,%d个数字,%d个符号,总计字数为%d", Num[words], Num[sentence], Num[letter], Num[shu], Num[symbol], Num[all]);
}

        

#include "HString.h"  // 引入前面实现的堆串


void Menu() {
	printf("*******文本处理系统*****\n");
	printf("*******1.文本输入******\n");
	printf("*******2.文本删除******\n");
	printf("*******3.文本输出******\n");
	printf("*******4.文本统计******\n");
	printf("*******5.文本保存******\n");
	printf("*******6.程序退出******\n");

}

// 06-文本输入
/*为了能够一直输入,这里将‘#’作为输入结束标志,并且利用string中的Push()函数进行字符的输入*/
void Text_Push(string* L) {
	printf("请输入文本,输入'#'后结束输入\n");
	char c = getchar();
	while (c != '#') {
		Push_String(L, c);
		c = getchar();
	}
}

// 07-文本存储
void Text_Save(string* L) {
	FILE* fp;               // 设置文件类型指针
	char FileName[20];
	scanf("%s", FileName); // 确认文件名称
	// 文本,追加方式打开
	if ((fp = fopen(FileName, "at")) == NULL) { // 用文本追加的方式打开目标文件,失败退出程序
		printf("cannot open file ");
		exit(1);
	}
	else {
		fputs(L->S, fp);                       // 成功的话就按行存储方式将文本存入指定文件的后续
	}
	fclose(fp);               // 随手关闭好习惯
}

// 08-操作选择
void Chose(int key, string* L) {
	switch (key) {
	case 1:Text_Push(L);
		break;
	case 2:Erase_string_B(L);
		break;
	case 3:Out_String(L);
		break;
	case 4:Tongji(L);
		break;
	case 5:Text_Save(L);
		break;
	case 6:exit(0);
		break;
	}
}

// 文本处理
void Text_Process() {
	string* L = init_String();
	int key = 1;
	while (1) {
		Menu();
		scanf("%d", &key);
		Chose(key, L);
		system("pause");
		system("cls");
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值