版权声明:可以转载奥 https://blog.csdn.net/Jiajikang_jjk/article/details/86774577
【C语言】以中文符号(句号)作为标识符进行分行处理
一、前言
这里只考虑单个句号(句号不连续),其余因素暂不考虑
二、说明
windows系统
文本文件保存格式:GBK
代码编码格式:GBK
三、实现
3.1 代码
/*
程序功能: txt规范化处理(原文本:wenben.txt)
分析:
1:以中文句号作为标识符
2:实现一个句号就是一行
*/
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
FILE *fp, *fpIn, *fp2; // 文件指针
int flen = 0;
int end_flag = 0;
int ending_flag = 0;
int print_count = 0;
char *filename = argv[1]; // 后台第二个参数:一个待读取的文本文档
if (argc == 1)
{
printf("运行程序标准格式:程序文件 原文本文件\n");
// printf("获取帮助输入格式:程序文件 -help\n");
return 0;
}
fp = fopen(filename, "r");
if (fp == NULL)
{
printf("file %s not found\n");
return 0;
}
// printf("\n成功打开文件");
fseek(fp, 0, 2); // 从开始偏移两个字符
flen = ftell(fp); // 获取当前位置
rewind(fp); // 重定位
// 判断句号
while (ending_flag == 0)
{
for (int i = 0; i < flen; i++) // 从0位置遍历当前位置
{
int c = fgetc(fp); // 获取当前字符
printf("%c", c); //打印当前字符
// 第一个if:判断句号
if (c == 161 || end_flag == 1) // 判断句号。getc()读出的句号:161和163
{
end_flag = 1;
if (c == 163) // 同时判断163---必须同时满足163和161
{
// 满足句号--要是到一行最后有一个句号
flen = 1;
end_flag = 0;
print_count++;
printf("\n"); // 换行
}
else if (c == 0x21)
{
flen = 1;
end_flag = 0;
print_count++;
printf("\n"); // 换行
}
}
// 第二个if:在不是句号的基础上 进行判断
if (print_count == 3)
{
flen = 1;
}
// 第三个if:判断c的位置==-1
if (c == EOF)
{
ending_flag = 1;
}
}
}
printf("\n写入成功,关闭文件");
fclose(fp); // 关闭文件指针
return 0;
}