![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
求一道数据结构题目!!!C语言的!谢了!!!
串的查找和替换(限2人完成)【系统任务】打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘;【功能要求】1)要用三种不同的匹配...
串的查找和替换(限2人完成)
【系统任务】打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘;
【功能要求】
1) 要用三种不同的匹配算法完成上述系统任务;
2) 完成上述三种算法的匹配时间的比较。 展开
【系统任务】打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘;
【功能要求】
1) 要用三种不同的匹配算法完成上述系统任务;
2) 完成上述三种算法的匹配时间的比较。 展开
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int replace(char *strFilePath, char *strOld, char *strNew)
{
FILE *pf = NULL;
long fileCur1 = 0, fileCur2 = 0;
size_t fileSize = 0;
long writeStart = 0;
long writeEnd = 0;
size_t i = 0;
char *strBuffer = NULL;
char *strBegin = NULL;
size_t oldLen = strlen(strOld);
size_t newLen = strlen(strNew);
if (NULL == strFilePath)
{
return -1;
}
pf = fopen(strFilePath, "r");
if (NULL == pf)
{
return -1;
}
fileCur1 = ftell(pf);
fseek(pf, 0, SEEK_END);
fileCur2 = ftell(pf);
fseek(pf, 0, SEEK_SET);
if ((fileCur1 == -1) || (fileCur2 == -1))
{
return -1;
}
fileSize = fileCur2 - fileCur1 + 1;
if (fileSize < oldLen)
{
return 0;
}
strBuffer = (char *)malloc((fileSize + 2)*sizeof(char));
memset(strBuffer, 0, (fileSize+2)*sizeof(char));
if (NULL == strBuffer)
{
return -1;
}
strBuffer[0] = ' ';
strBuffer[fileSize + 1] = ' ';
fread(strBuffer + 1, 1, fileSize, pf);
strBegin = strBuffer + 1;
fclose(pf);
pf = fopen(strFilePath, "w");
for (i = 0, writeStart = 0; i < fileSize; i++)
{
if (0 == strncmp(strOld, strBegin + i, oldLen))
{
if (!isalnum(strBegin[i-1]) && !isalnum(*(strBegin+i+oldLen)))
{
fwrite(strBegin + writeStart, 1, i - writeStart, pf);
fwrite(strNew, 1, newLen, pf);
i += oldLen;
writeStart = i;
continue;
}
}
i++;
}
fwrite(strBegin + writeStart, 1, fileSize - writeStart, pf);
fclose(pf);
free(strBuffer);
return 0;
}
int main()
{
replace("E:/hello.txt", "hello", "HELLO");
system("pause");
return 0;
}
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int replace(char *strFilePath, char *strOld, char *strNew)
{
FILE *pf = NULL;
long fileCur1 = 0, fileCur2 = 0;
size_t fileSize = 0;
long writeStart = 0;
long writeEnd = 0;
size_t i = 0;
char *strBuffer = NULL;
char *strBegin = NULL;
size_t oldLen = strlen(strOld);
size_t newLen = strlen(strNew);
if (NULL == strFilePath)
{
return -1;
}
pf = fopen(strFilePath, "r");
if (NULL == pf)
{
return -1;
}
fileCur1 = ftell(pf);
fseek(pf, 0, SEEK_END);
fileCur2 = ftell(pf);
fseek(pf, 0, SEEK_SET);
if ((fileCur1 == -1) || (fileCur2 == -1))
{
return -1;
}
fileSize = fileCur2 - fileCur1 + 1;
if (fileSize < oldLen)
{
return 0;
}
strBuffer = (char *)malloc((fileSize + 2)*sizeof(char));
memset(strBuffer, 0, (fileSize+2)*sizeof(char));
if (NULL == strBuffer)
{
return -1;
}
strBuffer[0] = ' ';
strBuffer[fileSize + 1] = ' ';
fread(strBuffer + 1, 1, fileSize, pf);
strBegin = strBuffer + 1;
fclose(pf);
pf = fopen(strFilePath, "w");
for (i = 0, writeStart = 0; i < fileSize; i++)
{
if (0 == strncmp(strOld, strBegin + i, oldLen))
{
if (!isalnum(strBegin[i-1]) && !isalnum(*(strBegin+i+oldLen)))
{
fwrite(strBegin + writeStart, 1, i - writeStart, pf);
fwrite(strNew, 1, newLen, pf);
i += oldLen;
writeStart = i;
continue;
}
}
i++;
}
fwrite(strBegin + writeStart, 1, fileSize - writeStart, pf);
fclose(pf);
free(strBuffer);
return 0;
}
int main()
{
replace("E:/hello.txt", "hello", "HELLO");
system("pause");
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
文件的打开,读取写入及关闭都比较简单,直接套用格式即可
如果文件比较小,考虑一次性的把全部的字符读入的一个数组中,然后都数组操作
char *strstr(const char *string, const char *strSearch);
看这个字符串操作函数的用法,用指针更好用。
如果替换的字符串长度不同,需要对字符串进行移动处理
如果文件比较小,考虑一次性的把全部的字符读入的一个数组中,然后都数组操作
char *strstr(const char *string, const char *strSearch);
看这个字符串操作函数的用法,用指针更好用。
如果替换的字符串长度不同,需要对字符串进行移动处理
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
3种匹配算法处理起来有点麻烦,写一下思路吧
1、首先打开文件,将文件内容读到内存中(数组或者动态申请内存)
2、输入匹配串和替换串;
3、字符串匹配算法有多种,给出两个参考资料
http://blog.csdn.net/WINCOL/article/details/4795369
http://wenku.baidu.com/view/bb2a82fffab069dc5022014c.html
4、至于匹配时间,可以在算法执行前获取当前时间,结束时再获取当前时间,结束时的时间减去开始时的时间就是算法时间,比较即可。
1、首先打开文件,将文件内容读到内存中(数组或者动态申请内存)
2、输入匹配串和替换串;
3、字符串匹配算法有多种,给出两个参考资料
http://blog.csdn.net/WINCOL/article/details/4795369
http://wenku.baidu.com/view/bb2a82fffab069dc5022014c.html
4、至于匹配时间,可以在算法执行前获取当前时间,结束时再获取当前时间,结束时的时间减去开始时的时间就是算法时间,比较即可。
追问
可否告知除了KMP和简单算法的第三种算法详细代码?感激不尽!
追答
给你的上面两个连接里面有,如果不符合你的要求的话,可以百度一下具体的算法名称
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询