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

【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 结果

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贾继康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值