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. }  

 

目录
相关文章
|
4月前
|
C语言
c语言编程练习题:7-23 分段计算居民水费
c语言编程练习题:7-23 分段计算居民水费
48 0
|
C语言
C语言OJ项目参考(2279) 字符串分段(串)
2279: 字符串分段(串) Description 输入一个字符串,将其分段输出,分段符为除字母和数字之外的符号。 Input 输入一个字符串 Output 输出分段后的字符串 Sample Input** ad/adfa,,123d?#a1 Sample Output ad adfa 123d a1 参考解答: #include &lt;stdi
1255 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)=
1210 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;
1505 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
2099 0
|
7天前
|
程序员 C语言
C语言库函数 — 内存函数(含模拟实现内存函数)
C语言库函数 — 内存函数(含模拟实现内存函数)
15 0
|
18天前
|
编译器 C语言 C++
【C语言】memset()函数(内存块初始化函数)
【C语言】memset()函数(内存块初始化函数)
23 0
|
18天前
|
编译器 C语言 C++
【C语言】memcpy()函数(内存块拷贝函数)
【C语言】memcpy()函数(内存块拷贝函数)
38 0
|
19天前
|
C语言 C++
【C语言】rand()函数(如何生成指定范围随机数)
【C语言】rand()函数(如何生成指定范围随机数)
15 0
|
27天前
|
C语言
在C语言中数组作为函数参数的应用与示例
在C语言中数组作为函数参数的应用与示例
13 0