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

版权声明:可以转载奥 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;
}

3.2 文本文件内容

在这里插入图片描述

3.2 结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Jiajikang_jjk/article/details/86774577