经典的字符串处理问题 KWIC c++版,实现了管道风格,调用返回风格还有OOP风格
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 196462 2009-04-06 20:28 KWICEXECallReturnstyle.txt
文件 360448 2009-04-06 20:16 KWICEXEKWIC.exe
文件 200037 2009-04-06 20:31 KWICEXEoopstyle.txt
文件 196462 2009-04-06 20:25 KWICEXEpipestyle.txt
文件 16351 2009-04-01 23:07 KWICEXETDP.txt
文件 1055 2009-04-06 20:53 KWICEXE运行时间统计.txt
文件 6299 2009-04-06 20:11 KWICSRCKWICCallReturnstyle.cpp
文件 1043 2009-04-06 20:00 KWICSRCKWICCallReturnstyle.h
文件 2903 2009-04-06 20:16 KWICSRCKWICDebugBuildLog.htm
文件 22587 2009-04-06 20:11 KWICSRCKWICDebugCallReturnstyle.obj
文件 196462 2009-04-06 20:28 KWICSRCKWICDebugCallReturnstyle.txt
文件 2405372 2009-04-06 20:16 KWICSRCKWICDebugKWIC.ilk
文件 92074 2009-04-06 20:00 KWICSRCKWICDebugKWIC.obj
文件 3342336 2009-04-04 00:42 KWICSRCKWICDebugKWIC.pch
文件 2173952 2009-04-06 20:16 KWICSRCKWICDebugKWIC.pdb
文件 716393 2009-04-06 20:16 KWICSRCKWICDebugOOPstyle.obj
文件 200037 2009-04-06 20:31 KWICSRCKWICDebugoopstyle.txt
文件 12204 2009-04-06 20:00 KWICSRCKWICDebugPipestyle.obj
文件 196462 2009-04-06 20:25 KWICSRCKWICDebugpipestyle.txt
文件 15178 2009-04-04 00:42 KWICSRCKWICDebugstdafx.obj
文件 16351 2009-04-01 23:07 KWICSRCKWICDebugTDP.txt
文件 461824 2009-04-06 20:16 KWICSRCKWICDebugvc70.idb
文件 217088 2009-04-06 20:16 KWICSRCKWICDebugvc70.pdb
文件 1055 2009-04-06 20:53 KWICSRCKWICDebug运行时间统计.txt
文件 4451 2009-04-06 12:50 KWICSRCKWICKWIC.cpp
文件 133 2009-04-02 23:45 KWICSRCKWICKWIC.txt
文件 4172 2009-04-04 00:42 KWICSRCKWICKWIC.vcproj
文件 4776 2009-04-06 20:16 KWICSRCKWICOOPstyle.cpp
文件 664 2009-04-06 19:56 KWICSRCKWICOOPstyle.h
文件 200037 2009-04-06 20:16 KWICSRCKWICoopstyle.txt
............此处省略17个文件信息
#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 == ‘ ‘
|| ch == ‘
‘ || ch == ‘ ‘
|| 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 != ‘
‘)
{
line[n++] = ch; //保存字符
}
line[n] = ‘ ‘; //给字符串打结
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 != ‘
‘)
{
temp->lines[0][n++] = ch; //保存字符
}
else
{
temp->lines[0][n] = ‘ ‘; //给字符串打结
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] = ‘ ‘;
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] = ‘ ‘;
//除去前面的噪音字符
int startindex = 0;
//查找从开始位置到第一个不是噪音字符的位置
while(IsNoisyCh(line[startindex])) startindex++;
j = 0;
while(line[j+startindex]!=‘ ‘)
{
line[j] = line[j+startindex];
j++;
}
line[j] = ‘ ‘;
//除去中间多余的噪音字符
j = 0;
char *temp = (char*)malloc(len + 1);
for(int i=0; line[i]!=‘ ‘; 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] = ‘ ‘;
strcpy(linetemp);
free(temp);
//下面的算法是不用其他的空间,不过这样就要进行许多移位操作,时间代价比较高
/*int i = 0;
while(line[i]!=‘ ‘)
{
if(IsNoi
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 196462 2009-04-06 20:28 KWICEXECallReturnst
文件 360448 2009-04-06 20:16 KWICEXEKWIC.exe
文件 200037 2009-04-06 20:31 KWICEXEoopst
文件 196462 2009-04-06 20:25 KWICEXEpipest
文件 16351 2009-04-01 23:07 KWICEXETDP.txt
文件 1055 2009-04-06 20:53 KWICEXE运行时间统计.txt
文件 6299 2009-04-06 20:11 KWICSRCKWICCallReturnst
文件 1043 2009-04-06 20:00 KWICSRCKWICCallReturnst
文件 2903 2009-04-06 20:16 KWICSRCKWICDebugBuildLog.htm
文件 22587 2009-04-06 20:11 KWICSRCKWICDebugCallReturnst
文件 196462 2009-04-06 20:28 KWICSRCKWICDebugCallReturnst
文件 2405372 2009-04-06 20:16 KWICSRCKWICDebugKWIC.ilk
文件 92074 2009-04-06 20:00 KWICSRCKWICDebugKWIC.obj
文件 3342336 2009-04-04 00:42 KWICSRCKWICDebugKWIC.pch
文件 2173952 2009-04-06 20:16 KWICSRCKWICDebugKWIC.pdb
文件 716393 2009-04-06 20:16 KWICSRCKWICDebugOOPst
文件 200037 2009-04-06 20:31 KWICSRCKWICDebugoopst
文件 12204 2009-04-06 20:00 KWICSRCKWICDebugPipest
文件 196462 2009-04-06 20:25 KWICSRCKWICDebugpipest
文件 15178 2009-04-04 00:42 KWICSRCKWICDebugstdafx.obj
文件 16351 2009-04-01 23:07 KWICSRCKWICDebugTDP.txt
文件 461824 2009-04-06 20:16 KWICSRCKWICDebugvc70.idb
文件 217088 2009-04-06 20:16 KWICSRCKWICDebugvc70.pdb
文件 1055 2009-04-06 20:53 KWICSRCKWICDebug运行时间统计.txt
文件 4451 2009-04-06 12:50 KWICSRCKWICKWIC.cpp
文件 133 2009-04-02 23:45 KWICSRCKWICKWIC.txt
文件 4172 2009-04-04 00:42 KWICSRCKWICKWIC.vcproj
文件 4776 2009-04-06 20:16 KWICSRCKWICOOPst
文件 664 2009-04-06 19:56 KWICSRCKWICOOPst
文件 200037 2009-04-06 20:16 KWICSRCKWICoopst
............此处省略17个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)