舍友在网上下载的txt小说,只有分章,但没有分段。这样阅读起来挺辛苦的,决定帮他一下。
上网搜索,却没有发现有分段器下载。于是我打开小说,仔细地察看了一下规律,发现每一小段虽然没有细分,但是之间是有间隔四个空格以上的。那四个空格大概是原来的每一段的缩进。看到这里就有思路了,决定用C语言写个小说自动分段器。
对C语言的文件操作我还很不熟悉,一直出错,而且由于自己写的调试代码的小问题,导致输出的结果在最后几行总是有乱码,调试了好久才发现问题。
代码如下,希望大家多多指教:
- /*
- Name: 小说自动分段器
- Copyright: Copyright ? 2011 Geek_Soledad All Rights Reserved
- Author: Geek_Soledad
- Date: 01-04-11 22:42
- Description: 对网络上一些没有分段的小说进行自动分段,
- 条件是原文中每段开头均有四个空格以上以作分段标志
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #define READSIZE 10240
- FILE * fsave = NULL;
- /* 该函数是自动分段的具体实现 */
- void devide ( char *buffer)
- {
- char *temp = NULL;
- char *present = buffer;
- char *temp2 = NULL;
- temp = strstr( present, " ");
- temp2 = strstr( present+4, " ");
- while ( temp && temp2 && *present){
- // puts("");
- fputc( '/n', fsave);
- for( ; present < temp2 && *present != '/0'; present++){
- // putchar( *present);
- fputc(*present, fsave);
- }
- temp = strstr( present, " ");
- temp2 = strstr( present+4, " ");
- }
- while (*present) {
- // putchar( *present);
- fputc( *present, fsave);
- present++;
- }
- }
- int main(int argc, char *argv[])
- {
- FILE * fload = NULL;
- char buffer[READSIZE] = "";
- char *isRead = NULL;
- clock_t start ;
- clock_t end ;
- fload = fopen( "test.txt", "r");
- if ( NULL == fload) {
- printf("找不到文件/n");
- system("PAUSE");
- return EXIT_FAILURE;
- }
- fsave = fopen( "save1.txt", "a");
- if ( NULL == fsave) {
- printf("无法建立存档文件/n");
- system("PAUSE");
- return EXIT_FAILURE;
- }
- while( NULL != fgets( buffer, READSIZE, fload) ){
- devide ( buffer);
- memset ( buffer, 0, sizeof(buffer));
- // isRead = fgets( buffer, READSIZE, fload);
- }
- fclose(fload);
- fclose(fsave);
- end = clock();
- printf("共耗时%f秒/n", (double)( end - start) / CLK_TCK);
- system("PAUSE");
- return 0;
- }