C语言写小说分段器

简介:    舍友在网上下载的txt小说,只有分章,但没有分段。这样阅读起来挺辛苦的,决定帮他一下。   上网搜索,却没有发现有分段器下载。于是我打开小说,仔细地察看了一下规律,发现每一小段虽然没有细分,但是之间是有间隔四个空格以上的。

   舍友在网上下载的txt小说,只有分章,但没有分段。这样阅读起来挺辛苦的,决定帮他一下。

  上网搜索,却没有发现有分段器下载。于是我打开小说,仔细地察看了一下规律,发现每一小段虽然没有细分,但是之间是有间隔四个空格以上的。那四个空格大概是原来的每一段的缩进。看到这里就有思路了,决定用C语言写个小说自动分段器。

  对C语言的文件操作我还很不熟悉,一直出错,而且由于自己写的调试代码的小问题,导致输出的结果在最后几行总是有乱码,调试了好久才发现问题。

  代码如下,希望大家多多指教:

Code:
  1. /* 
  2.   Name: 小说自动分段器  
  3.   Copyright: Copyright ? 2011 Geek_Soledad All Rights Reserved 
  4.   Author: Geek_Soledad 
  5.   Date: 01-04-11 22:42 
  6.   Description: 对网络上一些没有分段的小说进行自动分段, 
  7.             条件是原文中每段开头均有四个空格以上以作分段标志  
  8. */  
  9. #include <stdio.h>  
  10. #include <stdlib.h>  
  11. #include <time.h>  
  12.   
  13. #define READSIZE 10240  
  14.   
  15. FILE * fsave = NULL;  
  16.   
  17. /* 该函数是自动分段的具体实现 */   
  18. void devide ( char *buffer)   
  19. {  
  20.     char *temp = NULL;  
  21.     char *present = buffer;  
  22.     char *temp2 = NULL;  
  23.     temp = strstr( present, "    ");  
  24.     temp2 = strstr( present+4, "    ");  
  25.   
  26.     while ( temp && temp2 && *present){  
  27. //      puts("");  
  28.         fputc( '/n', fsave);  
  29.         for( ; present < temp2 && *present != '/0'; present++){  
  30.   //          putchar( *present);  
  31.             fputc(*present, fsave);  
  32.         }  
  33.         temp = strstr( present, "    ");  
  34.         temp2 = strstr( present+4, "    ");  
  35.     }  
  36.     while (*present) {  
  37.   //      putchar( *present);  
  38.         fputc( *present, fsave);  
  39.         present++;  
  40.     }  
  41. }  
  42.   
  43. int main(int argc, char *argv[])  
  44. {  
  45.     FILE * fload = NULL;  
  46.     char buffer[READSIZE] = "";  
  47.     char *isRead = NULL;  
  48.       
  49.     clock_t start ;  
  50.     clock_t end ;  
  51.       
  52.     fload = fopen( "test.txt""r");  
  53.     if ( NULL == fload) {  
  54.         printf("找不到文件/n");  
  55.         system("PAUSE");  
  56.         return EXIT_FAILURE;  
  57.     }  
  58.       
  59.     fsave = fopen( "save1.txt""a");  
  60.     if ( NULL == fsave) {  
  61.         printf("无法建立存档文件/n");  
  62.         system("PAUSE");  
  63.         return EXIT_FAILURE;  
  64.     }  
  65.       
  66.     while( NULL != fgets( buffer, READSIZE, fload) ){  
  67.         devide ( buffer);  
  68.         memset ( buffer, 0, sizeof(buffer));  
  69. //      isRead = fgets( buffer, READSIZE, fload);  
  70.     }   
  71.     fclose(fload);  
  72.     fclose(fsave);  
  73.       
  74.     end = clock();  
  75.     printf("共耗时%f秒/n", (double)( end - start) / CLK_TCK);  
  76.     system("PAUSE");  
  77.     return 0;  
  78. }  

 

目录
相关文章
|
9月前
|
C语言
c语言编程练习题:7-23 分段计算居民水费
c语言编程练习题:7-23 分段计算居民水费
198 0
|
C语言
C语言OJ项目参考(2279) 字符串分段(串)
2279: 字符串分段(串) Description 输入一个字符串,将其分段输出,分段符为除字母和数字之外的符号。 Input 输入一个字符串 Output 输出分段后的字符串 Sample Input** ad/adfa,,123d?#a1 Sample Output ad adfa 123d a1 参考解答: #include &lt;stdi
1304 0
|
C语言
《C语言及程序设计》实践参考——求解分段函数的值
返回:贺老师课程教学链接  项目要求 【项目2-求解分段函数的值】 #include&lt;stdio.h&gt; double f(double); //这一句是对自定义函数f的声明 int main( ) { double x; printf("请输入x的值:"); scanf("%lf", &amp;x); printf("解得:f(%.2f)=
1288 0
|
C语言 编译器
《C语言及程序设计》实践参考——分段函数求值
返回:贺老师课程教学链接  项目要求 【项目1:分段函数求值】从键盘输入x的值(要求为实型),根据公式1计算并输出x和y的值。 [参考解答] 解法1   #include &lt;stdio.h&gt; #include &lt;math.h&gt; int main ( ) { double x, y; scanf("%lf", &amp;x); if (x&lt;
1580 0
|
C语言
《C语言及程序设计》实践参考——分段函数求值switch语句版
返回:贺老师课程教学链接  项目要求 【项目:分段函数求值switch语句版】从键盘输入x的值(要求为整型),根据公式1计算并输出x和y的值。要求用switch语句完成。[参考解答] 解法1:各分段的标准都为2的倍数,所以,构造表达式 t= x/2,根据t的取值决定switch分支; #include &lt;stdio.h&gt; #include &lt;math.h&gt; int
2201 0
|
1月前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
59 23
|
1月前
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
63 15
|
1月前
|
C语言
【C语言程序设计——函数】亲密数判定(头歌实践教学平台习题)【合集】
本文介绍了通过编程实现打印3000以内的全部亲密数的任务。主要内容包括: 1. **任务描述**:实现函数打印3000以内的全部亲密数。 2. **相关知识**: - 循环控制和跳转语句(for、while循环,break、continue语句)的使用。 - 亲密数的概念及历史背景。 - 判断亲密数的方法:计算数A的因子和存于B,再计算B的因子和存于sum,最后比较sum与A是否相等。 3. **编程要求**:根据提示在指定区域内补充代码。 4. **测试说明**:平台对代码进行测试,预期输出如220和284是一组亲密数。 5. **通关代码**:提供了完整的C语言代码实现
60 24
|
1月前
|
存储 C语言
【C语言程序设计——函数】递归求斐波那契数列的前n项(头歌实践教学平台习题)【合集】
本关任务是编写递归函数求斐波那契数列的前n项。主要内容包括: 1. **递归的概念**:递归是一种函数直接或间接调用自身的编程技巧,通过“俄罗斯套娃”的方式解决问题。 2. **边界条件的确定**:边界条件是递归停止的条件,确保递归不会无限进行。例如,计算阶乘时,当n为0或1时返回1。 3. **循环控制与跳转语句**:介绍`for`、`while`循环及`break`、`continue`语句的使用方法。 编程要求是在右侧编辑器Begin--End之间补充代码,测试输入分别为3和5,预期输出为斐波那契数列的前几项。通关代码已给出,需确保正确实现递归逻辑并处理好边界条件,以避免栈溢出或结果
63 16
|
1月前
|
存储 编译器 C语言
【C语言程序设计——函数】分数数列求和2(头歌实践教学平台习题)【合集】
函数首部:按照 C 语言语法,函数的定义首部表明这是一个自定义函数,函数名为fun,它接收一个整型参数n,用于指定要求阶乘的那个数,并且函数的返回值类型为float(在实际中如果阶乘结果数值较大,用float可能会有精度损失,也可以考虑使用double等更合适的数据类型,这里以float为例)。例如:// 函数体代码将放在这里函数体内部变量定义:在函数体中,首先需要定义一些变量来辅助完成阶乘的计算。比如需要定义一个变量(通常为float或double类型,这里假设用float。
36 3

热门文章

最新文章