KWIC问题C++版


经典的字符串处理问题 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 == ‘ ‘ 
|| 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  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个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)