小说分段器0.1.1.20

   今天上午对昨晚的原版本的改进。主要是改进了查找分段标志的算法,使分段逻辑显得更合理。

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. /* 
  10.    版本:0.1.1 
  11.    功能更新:改进了查找段标志的算法,及调试的代码。 
  12. */  
  13.   
  14. #include <stdio.h>  
  15. #include <stdlib.h>  
  16. #include <time.h>  
  17.   
  18. #define READSIZE 10240  
  19.   
  20. //#define _debug  
  21. FILE * fsave = NULL;  
  22.   
  23. void devide ( char *buffer); /* 该函数是自动分段的具体实现 */   
  24. char* findFlag ( char* temp, char* temp2, char* present);  
  25.   
  26. /* 该函数用于寻找作为分段标志的四个连贯的空格 */  
  27. char* findFlag ( char* temp, char* temp2, char* present)  
  28. {  
  29.     if ( NULL != temp ) {  
  30.         temp2 = temp;  
  31.         while ( ' ' == *temp2 && *temp2 ){  
  32.             temp2++;  
  33.         }  
  34.         return strstr( temp2, "    ");  
  35.     } else {  
  36.         return strstr( present + 1, "    ");  
  37.     }  
  38. }  
  39.   
  40. /* 该函数是自动分段的具体实现 */   
  41. void devide ( char *buffer)   
  42. {  
  43.     char *temp = NULL;  
  44.     char *present = buffer;  
  45.     char *temp2 = NULL;  
  46.   
  47.     temp = strstr( present, "    ");  
  48.     temp2 = findFlag( temp, temp2, present);  
  49.   
  50.     while ( temp && temp2 && *present){  
  51.     #ifdef _debug  
  52.         puts("");  
  53.         getch();  
  54.     #else  
  55.         fputc( '/n', fsave);  
  56.     #endif  
  57.         for( ; present < temp2 && *present != '/0'; present++){  
  58.     #ifdef _debug  
  59.             putchar( *present);  
  60.     #else  
  61.             fputc(*present, fsave);  
  62.     #endif  
  63.         }  
  64.         temp = strstr( present, "    ");  
  65.     //    temp2 = strstr( present+4, "    ");  
  66.         temp2 = findFlag( temp, temp2, present);  
  67.     }  
  68.     while (*present) {  
  69.     #ifdef _debug    
  70.         putchar( *present);  
  71.     #else  
  72.         fputc( *present, fsave);  
  73.     #endif  
  74.         present++;  
  75.     }  
  76. }  
  77.   
  78. int main(int argc, char *argv[])  
  79. {  
  80.     FILE * fload = NULL;  
  81.     char buffer[READSIZE] = "";  
  82.     char *isRead = NULL;  
  83.       
  84.     printf("请将要转换的文件更名为test.txt,并与本程序存放在同一目录下。/n");  
  85.     system("PAUSE");  
  86.           
  87.     clock_t start = clock();  
  88.     clock_t end ;  
  89.       
  90.     fload = fopen( "test.txt""r");  
  91.     if ( NULL == fload) {  
  92.         printf("找不到文件/n");  
  93.         system("PAUSE");  
  94.         return EXIT_FAILURE;  
  95.     }  
  96.       
  97.     fsave = fopen( "save1.txt""a");  
  98.     if ( NULL == fsave) {  
  99.         printf("无法建立存档文件/n");  
  100.         system("PAUSE");  
  101.         return EXIT_FAILURE;  
  102.     }  
  103.       
  104.     while( NULL != fgets( buffer, READSIZE, fload) ){  
  105.         devide ( buffer);  
  106.         memset ( buffer, 0, sizeof(buffer));  
  107. //      isRead = fgets( buffer, READSIZE, fload);  
  108.     }   
  109.     fclose(fload);  
  110.     fclose(fsave);  
  111.       
  112.     end = clock();  
  113.     printf("转换完成,共耗时%f秒/n", (double)( end - start) / CLK_TCK);  
  114.     system("PAUSE");  
  115.   
  116.     return 0;  
  117. }  

 

上一篇:Socket(一)


下一篇:在CPU上跑yolov5(详细步骤+适合入门)