700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【C语言】中文符号(句号 问号 感叹号)作为标识符进行分行处理

【C语言】中文符号(句号 问号 感叹号)作为标识符进行分行处理

时间:2018-09-16 23:44:34

相关推荐

【C语言】中文符号(句号 问号 感叹号)作为标识符进行分行处理

文章目录

【C语言】中文符号(句号,问号,感叹号)作为标识符进行分行处理一、前言二、环境三、代码实现3.1 实现一3.1.1 流程图3.1.2 代码3.1.3 原文本文件3.1.4 结果3.1.5 说明 3.2 实现二3.2.1 代码3.2.2 文本文档内容3.2.3 结果3.2.4 说明

【C语言】中文符号(句号,问号,感叹号)作为标识符进行分行处理

一、前言

上一篇博文是针对中文符号:句号,以此来实现换行处理,有很多不完善之处,只是作为记录代码的思想,此篇博文进一步将未完善代码的版本抛出来,以此作为方便以后查阅其中代码思想。在结尾说会说明此版本不足之处

二、环境

Windows

文本文件保存格式:GBK

代码编码格式:GBK

三、代码实现

3.1 实现一
3.1.1 流程图
3.1.2 代码

/** @Author: JJK * @Date: -02-08 17:25:17 * @Last Modified by: JJK* @Last Modified time: -02-08 17:39:48* @Code Function:*中文符号(句号,问号,感叹号)实现分行*/#include <stdio.h>#include <string.h>#include <stdbool.h>bool getIndex(char *str, char *subStr);int main(int argc, char *argv[]){char str[1024];char resultStr[1024][1024]; // 创建一个二维数组int index, dataLen, preIndex;int resultNum;char *f1 = argv[1]; // 后台参数FILE *fp1 = fopen(f1, "r"); // 创建文件指针及打开文本文件if (fp1 == NULL){printf("文件 %s 打开时发生错误", f1);return -1;}while (fgets(str, sizeof(str), fp1)) // 按行读取文件{index = 0;dataLen = 0;preIndex = 0;resultNum = 0;while (index < strlen(str)) // 循环以'\n'为代表的每行{// 调用自定义函数if (getIndex(&str[index], "?") || getIndex(&str[index], "。") || getIndex(&str[index], "!")) // 函数成立{int len = index - preIndex; // 中文字符的长度memcpy(resultStr + (dataLen++), &str[preIndex], len); // 复制第二个形参到第一个形参中,复制长度:lenresultNum++;*(*(resultStr + (dataLen - 1)) + len) = '\0';preIndex = index + strlen("?"); // 中文字符的长度+index += strlen("?");}else{index++;}} // 判断结束for (int i = 0; i < resultNum; i++){printf("%s\n", resultStr + i);}}fclose(fp1);return 0;}// 子函数bool getIndex(char *str, char *subStr){int count = 0; // 标识符for (int i = 0; i < strlen(subStr); i++) // 遍历标点符号的长度{if (*(str + i) == *(subStr + i)) // 判断是否相等{count++; // 累加到}}return strlen(subStr) == count ? true : false; // 判断是否是中文字符的长度}

3.1.3 原文本文件
3.1.4 结果
3.1.5 说明

1:此代码实现的思想特别好

2:在功能需求有很大不足之处,对于原文本文件只能读取有表示符号的内容,对于未有表示符号的一概不读取。

3:倘若是多个连续的标识符符号出现的时候,也不能进行处理达到满意效果

3.2 实现二
3.2.1 代码

/** @Author: JJK * @Date: -02-08 17:25:17 * @Last Modified by: 贾继康* @Last Modified time: -02-08 21:43:17* @Code Function:*中文符号(句号,问号,感叹号)实现分行*///句号 -95,-93//感叹号 -93,-95//问号 -93,-65//换行是10#include <stdio.h>int main(){FILE *read = fopen("./wenben/wenben.txt", "r");FILE *write = fopen("./wenben/wenbentest2.txt", "w");char a = fgetc(read);char b = fgetc(read);while (a != EOF){if (a >= 0 && a <= 127 && a != 10)// ascii码:0-127{fputc(a, write);fseek(read, -1, SEEK_CUR);// 指针移动到离文件当前位置后一个位置a = fgetc(read);b = fgetc(read);}else if (a == 10){// fputc(10, write);fseek(read, -1, SEEK_CUR);a = fgetc(read);b = fgetc(read);}else if ((a == -95 && b == -93) || (a == -93 && b == -95) || (a == -93 && b == -65)){fputc(a, write);fputc(b, write);fputc(10, write);a = fgetc(read);b = fgetc(read);// 连续下一个是中文字符:指针移动,不进行其他操作while ((a == -95 && b == -93) || (a == -93 && b == -95) || (a == -93 && b == -65)){a = fgetc(read);b = fgetc(read);}}else{fputc(a, write);fputc(b, write);a = fgetc(read);b = fgetc(read);}}fclose(read);fclose(write);return 0;}

3.2.2 文本文档内容
3.2.3 结果
3.2.4 说明

此程序也是一个有缺陷的程序,譬如光标在原文本中只能停留在文本内容末尾处,此程序只能写入到文本中,没能打印到控制台也是极其不方便的。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。