- 4
- 0
- 约6.9千字
- 约 12页
- 2018-06-15 发布于江西
- 举报
c 算法之字符串查找.doc
C++算法之字符串查找
字符串运算是我们开发软件的基本功,其中比较常用的功能有字符串长度的求解、字符串的比较、字符串的拷贝、字符串的upper等等。另外一个经常使用但是 却被我们忽视的功能就是字符串的查找。word里面有字符串查找、notepad里面有字符串查找、winxp里面也有系统自带的字符串的查找,所以编写 属于自己的字符串查找一方面可以提高自己的自信心,另外一方面在某些情况下可以提高软件的运行效率。下面我们就三个方面讨论一下字符串的查找方法:
1)基本字符串查找
2)KMP查找
3)多核cpu下的字符串查找 (一)、首先介绍一下普通的字符串查找方法:
a)指针是否为空,否则返回
b)判断str是否为‘\0’,判断剩下来的字符串长度是否 =模板字符串的长度,只有一个不符合,函数结束运行
c)依次比较字符串和模板字符串的内容,如果全部符合,返回;只要一个不符合,break跳出,str加1,转b)
那么算法应该怎么写呢?朋友们可以自己先书写一下,即使在纸上写也可以。
char* strstr(const char* str, char* data)
int index;
int len;
if(NULL == str || NULL == str)
return NULL;
len = strlen(data);
while(*str (int)strlen(str) = len){
for(index = 0; index len; index ++){
if(str[index] != data[index])
break;
if(index == len)
return (char*) str;
str++;
return NULL;
为了说明代码的正确性,我们可以编写几个测试用例测试一下。
void test()
assert(NULL == strstr(NULL, china ));
assert(NULL == strstr( hello, world , china ));
assert(NULL != strstr( hello, china , china ));
前面我们编写了简单的字符查找函数。虽然比较简单,但是也算能用。然而,经过我们仔细分析研究一下,这么一个简单的函数还是有改进的空间的。在什么地方改进呢?大家可以慢慢往下看。
下面的代码是优化前的代码,现在再贴一次,这样分析起来也方便些:
char* strstr(const char* str, char* data)
int index;
int len;
if(NULL == str || NULL == str)
return NULL;
len = strlen(data);
while(*str (int)strlen(str) = len){
for(index = 0; index len; index ++){
if(str[index] != data[index])
break;
if(index == len)
return (char*) str;
str++;
return NULL;
不知道朋友们发现没有,原来的while条件中有一个很费时的操作。那就是每次str移动的时候,都需要判断str的长度大小。如果str的长度远大于data的长度,那么计算str长度的时间是相当可观的。
int check_length_of_str(const char* str, int len)
int index;
for(index = 0; index len; index ++){
if(‘\0’ == str[index])
return 0;
return 1;
char* strstr(const char* str, char* data)
int index;
int len;
if(NULL == str || NULL == str)
return NULL;
len = strlen(data);
while(*str check_length_of_str(str, len)){
for(index = 0; index len; index ++){
if(str[index] != data[index])
break;
if(index == len)
return (char*) str;
str++;
return NULL;
上面的代码很好地解决了长度判断的问题,这样一来每
您可能关注的文档
最近下载
- 教科版四下科学《植物的生长变化》单元解读(新教材解读).pptx VIP
- 厦门钨业分拆厦钨新能上市的动因及绩效研究.pdf VIP
- 厦门同安事业单位笔试真题2025.docx VIP
- 课题申报:四川方言口传文化的传承普及与乡土记忆重建研究.pdf VIP
- 2025年高考英语热点话题阅读热点时文外刊精读集锦3 春节申遗成功和非物质文化遗产(解析版).docx VIP
- 《入党志愿书空白表格.doc VIP
- 中英文对照 MDCG-2020-1 医疗器械软件的临床评价MDR 性能评价IVDR指南.pdf VIP
- 星玛电梯SI210系统.doc VIP
- 国家科技支撑计划项目建议书-yzxzcom.DOC VIP
- 中华民族共同体概论课件专家版4第四讲 天下秩序与华夏共同体的演进(夏商周时期).pptx VIP
原创力文档

文档评论(0)