资源简介
对读入的某个文本文件input.txt中,拆出英文单词,输出一个按字典顺序排列的单词表,结果输出在文本文件output.txt中,每个单词一行,并在单词后输出该单词出现的个数,两个字段之间用逗号分隔。约定单词仅由英文字母组成,单词间由非英文字母分隔,相同单词只输出一个,大小写不区分。
代码片段和文件信息
/*
* Copyright(C) 2011 Ruijie Network. All rights reserved.
*/
/*
* file_operate.c
* Original Author: hgt@ruijie.com.cn 2011-3-3
*
* 与文件相关的操作函数模块。该模块中包含了文件打开,求文件
* 长度,输入字符串到文件,从文件中读取单词的操作。并且,
* 这些操作都是安全的。
*
* History
*
*/
#include “file_operate.h“
/**
* 安全的打开文件
* @fname: 文件名
* @attr: 文件打开时的属性值
*
* 以指定的方式打开给定的名称的文件。当文件不存在时,该函数会用给
* 定的名称以读写方式创建文件,并返回文件指针。
*/
FILE* file_open( char* fname char* attr ){
FILE* fp;
fp = NULL;
fp = fopen( fname attr );
if ( fp == NULL ) { /*打开文件失败*/
printf(“Arguments error !\n“);
printf(“System will create file.\n“);
fp = fopen( fname “w+“ ); /*新建文件*/
if ( fp == NULL ) {
printf(“System error!\n“);
exit( -1 );
}
}
return fp;
}
/**
* 获得指定文件的长度
* @fp: 文件指针
*
* 获得文件的长度,并返回。
*/
long file_lenght( FILE* fp ){
long length;
long locate;
if ( fp == NULL) {
printf(“Arguments error !\n“);
return -1;
}
locate = ftell( fp ); /*获得文件指针的当前位置*/
fseek( fp 0L SEEK_END ); /*将文件指针指向文件尾部*/
length = ftell( fp ); /*获得文件的长度*/
fseek( fp locate SEEK_SET ); /*恢复文件指针的位置*/
return length;
}
/**
* 输入任意字符到指定的文件
* @fp:文件指针
*
* 从标准输入中获取字符,送到fp所指向的文件中
* 按‘#’键结束输入
*/
void input2file( FILE* fp ){
char ch;
if ( fp == NULL ) {
printf(“Arguments error!\n“);
return;
}
printf(“Enter # to stop input.\n“);
while ( (ch = getchar()) != ‘#‘ ) {
fputc( ch fp );
}
fseek( fp 0L SEEK_SET ); /*将文件指针重新指向文件头*/
return;
}
#define BUFFER_LEN 512 /*单词缓冲区增量*/
/**
* 从给定的文件中读取单词
* @fp:文件指针
*
* 从指定的文件中读取单词,并返回。需要注意的是,
* 返回单词时,是以堆内存为载体的,所以需要在其他
* 地方释放,否则会造成内存泄露。
*/
char* read_word( FILE* fp ){
char ch;
char* word;
int buflen;
int wordlen;
MALLOC( word char BUFFER_LEN ); /*申请单词缓冲区*/
buflen = BUFFER_LEN;
wordlen = 0;
while ( !feof( fp ) ) {
ch = fgetc( fp );
if ( ch >= ‘a‘&& ch <= ‘z‘ || ch >= ‘A‘&& ch <= ‘Z‘ ) { /*判断是否是单词的组成元素*/
if ( wordlen >= buflen ) { /*如果单词的长度大于缓冲区的大小,则需要扩大缓冲区大小*/
REALLOC( word char ( buflen + BUFFER_LEN ) );
buflen += BUFFER_LEN;
}
word[wordlen++] = ch;
} else if ( wordlen > 0) { /*拼装成功一个单词,并返回*/
word[wordlen] = ‘\0‘;
return word;
} else{ /*未遇到有效字符*/
continue;
}
}
if ( wordlen > 0 ) {
word[wordlen] = ‘\0‘;
return word;
} else {
free( word );
return (char*)0;
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3333 2011-03-05 12:02 hgt编码练习\file_operate.c
文件 441 2011-03-05 12:21 hgt编码练习\file_operate.h
文件 1323 2011-03-05 12:21 hgt编码练习\main.c
文件 258 2011-03-05 05:11 hgt编码练习\makefile
文件 592 2011-03-05 12:05 hgt编码练习\memory.c
文件 931 2011-03-05 12:21 hgt编码练习\memory.h
文件 5122 2011-03-05 12:21 hgt编码练习\word_operate.c
文件 505 2011-03-05 11:25 hgt编码练习\word_operate.h
目录 0 2011-03-05 12:21 hgt编码练习
----------- --------- ---------- ----- ----
12505 9
- 上一篇:一个简单的LINUX防火墙
- 下一篇:CAN口助手CANtools
相关资源
- 文本对比器 找出两个文本文件不同的
- 文本文件字符串的检索和计数KMP算法
- 编写程序,该程序实现打开一个文本
- 文本文件txt文件内容比较器
- 文本文件 txt 按指定行数拆分成多个独
- 文本文件无失真压缩 Huffman
- delphi 读取文本文件画折线图
- 十六进制文本文件转换为二进制文件
- 安卓读取文本文件并处理中文乱码
- MP3格式转换为十六进制文本文件
- labview读取txt数据读取文本文件的M行至
- 文本文件单词的检索和计数
- 文本文件的加密与解密
- 使用kettle将文本文件导入到数据库
- 按行随机打乱文本文件(xe3)
- 绿色小巧的超大文本文件查看编辑器
- 批量产生有内容列表的UTF-8格式文本文
- labview读取文本文件到数组
- 同名文本文件合并器 可将两个文件夹
- LogViewPro中文版 超大文本文件打开利器
- MyNotepad 1.0.0.8 (打开超大文本文件)
- QT 程序 删除文本文件中某一行
- 文本文件转换二进制文件
- txt文件的连续读写的labview程序
- x86汇编语言文本字符串查找替换程序
- 批量提取CAD中多段线各节点坐标并导
- 文本文件单词的检索与计数
- GBK16字库,内含二进制文件和文本文件
- 使用 FME 将勘测定界坐标交换格式文本
- 单词处理程序
评论
共有 条评论