资源简介
经典的字符串处理问题 KWIC c++版,实现了管道风格,调用返回风格还有OOP风格

代码片段和文件信息
#include “CallReturnstyle.h“
#include
#include
#include
using namespace std;
extern FILE *g_std;
extern FILE *g_foutput;
//KWIC链表头
KWICItem *g_listhead = NULL;
/*
* IsNoisyCh - 判断是否为噪音字符
* @ch 要判断的字符
*
* 判断@ch字符是否为噪音字符
*/
bool IsNoisyCh(char ch)
{
if(ch == ‘ ‘ || ch == ‘\t‘
|| ch == ‘\n‘ || ch == ‘\0‘
|| ch == ‘‘ || ch == ‘!‘
|| ch == ‘?‘ || ch == ‘;‘)
return true;
else
return false;
}
/**
* GetNextLine - 获取文件中的下一行字符串
* @source: 源文件指针
* @line: 把所获取的字符串保存到line中
*
* 获取@source文件中的下一行字符串到@line
*
*/
bool GetNextLine(FILE *sourcechar line[])
{
//如果文件指针无效或字符串指针无效则返回
if(source == NULL || line == NULL)
{
return false;
}
//如果文件指针有效则读取一行字符到line中
int ch; //临时字符
int n; //已保存到的字符数
n = 0;
//循环读取一个字符直到遇到换行符
while((ch = fgetc(source)) != EOF && ch != ‘\n‘)
{
line[n++] = ch; //保存字符
}
line[n] = ‘\0‘; //给字符串打结
if(ch == EOF)
return false;
else
return true;
}
/*
*
* LoadFromFile - 从文件中读取每一行字符串到链表中
* @source 文件指针
*
*
*
*/
void LoadFromFile(char filename[])
{
FILE *source = fopen(filename“r“);
if(source == NULL)
return ;
int ch; //临时字符
int n = 0; //已保存到的字符数
KWICItem *temp = NULL;
KWICItem *g_listpos = NULL;
if(g_listhead == NULL)
{
g_listhead = temp = new KWICItem;
memset(temp->lines0MAX_LINES*MAX_COUNT);
temp->linecount = 1;
temp->next = NULL;
g_listpos = temp;
}
//循环读取一个字符直到遇到换行符
while((ch = fgetc(source)) != EOF )
{
if(ch != ‘\n‘)
{
temp->lines[0][n++] = ch; //保存字符
}
else
{
temp->lines[0][n] = ‘\0‘; //给字符串打结
g_listpos->next = temp;
g_listpos = temp;
temp = new KWICItem;
memset(temp->lines0MAX_LINES*MAX_COUNT);
temp->linecount = 1;
temp->next = NULL;
n=0;
}
}
g_listpos->next = temp;
g_listpos = temp;
g_listpos->lines[0][n] = ‘\0‘;
g_listpos->next = NULL;
if(temp)
{
// delete temp;
// temp = NULL;
}
fclose(source);
}
void PreProcess(char line[])
{
int len = strlen(line);
//除去后面的噪音字符
int j = len - 1;
while(j>0 && IsNoisyCh(j)) j--;
line[j] = ‘\0‘;
//除去前面的噪音字符
int startindex = 0;
//查找从开始位置到第一个不是噪音字符的位置
while(IsNoisyCh(line[startindex])) startindex++;
j = 0;
while(line[j+startindex]!=‘\0‘)
{
line[j] = line[j+startindex];
j++;
}
line[j] = ‘\0‘;
//除去中间多余的噪音字符
j = 0;
char *temp = (char*)malloc(len + 1);
for(int i=0; line[i]!=‘\0‘; i++)
{
if(!IsNoisyCh(temp[j-1]) && ((IsNoisyCh(line[i]) && IsNoisyCh(line[i+1]))
|| (IsNoisyCh(line[i]) && !IsNoisyCh(line[i+1]))))
{
temp[j++] = ‘ ‘;
}
else if(!IsNoisyCh(line[i]))
{
temp[j++] = line[i];
}
}
temp[j] = ‘\0‘;
strcpy(linetemp);
free(temp);
//下面的算法是不用其他的空间,不过这样就要进行许多移位操作,时间代价比较高
/*int i = 0;
while(line[i]!=‘\0‘)
{
if(IsNoi
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 196462 2009-04-06 20:28 KWIC\EXE\CallReturnst
文件 360448 2009-04-06 20:16 KWIC\EXE\KWIC.exe
文件 200037 2009-04-06 20:31 KWIC\EXE\oopst
文件 196462 2009-04-06 20:25 KWIC\EXE\pipest
文件 16351 2009-04-01 23:07 KWIC\EXE\TDP.txt
文件 1055 2009-04-06 20:53 KWIC\EXE\运行时间统计.txt
文件 6299 2009-04-06 20:11 KWIC\SRC\KWIC\CallReturnst
文件 1043 2009-04-06 20:00 KWIC\SRC\KWIC\CallReturnst
文件 2903 2009-04-06 20:16 KWIC\SRC\KWIC\Debug\BuildLog.htm
文件 22587 2009-04-06 20:11 KWIC\SRC\KWIC\Debug\CallReturnst
文件 196462 2009-04-06 20:28 KWIC\SRC\KWIC\Debug\CallReturnst
文件 2405372 2009-04-06 20:16 KWIC\SRC\KWIC\Debug\KWIC.ilk
文件 92074 2009-04-06 20:00 KWIC\SRC\KWIC\Debug\KWIC.obj
文件 3342336 2009-04-04 00:42 KWIC\SRC\KWIC\Debug\KWIC.pch
文件 2173952 2009-04-06 20:16 KWIC\SRC\KWIC\Debug\KWIC.pdb
文件 716393 2009-04-06 20:16 KWIC\SRC\KWIC\Debug\OOPst
文件 200037 2009-04-06 20:31 KWIC\SRC\KWIC\Debug\oopst
文件 12204 2009-04-06 20:00 KWIC\SRC\KWIC\Debug\Pipest
文件 196462 2009-04-06 20:25 KWIC\SRC\KWIC\Debug\pipest
文件 15178 2009-04-04 00:42 KWIC\SRC\KWIC\Debug\stdafx.obj
文件 16351 2009-04-01 23:07 KWIC\SRC\KWIC\Debug\TDP.txt
文件 461824 2009-04-06 20:16 KWIC\SRC\KWIC\Debug\vc70.idb
文件 217088 2009-04-06 20:16 KWIC\SRC\KWIC\Debug\vc70.pdb
文件 1055 2009-04-06 20:53 KWIC\SRC\KWIC\Debug\运行时间统计.txt
文件 4451 2009-04-06 12:50 KWIC\SRC\KWIC\KWIC.cpp
文件 133 2009-04-02 23:45 KWIC\SRC\KWIC\KWIC.txt
文件 4172 2009-04-04 00:42 KWIC\SRC\KWIC\KWIC.vcproj
文件 4776 2009-04-06 20:16 KWIC\SRC\KWIC\OOPst
文件 664 2009-04-06 19:56 KWIC\SRC\KWIC\OOPst
文件 200037 2009-04-06 20:16 KWIC\SRC\KWIC\oopst
............此处省略17个文件信息
相关资源
- 国际象棋的qt源代码
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
评论
共有 条评论