模拟实现strstr和strrstr strstr函数用于判断str2是否是str1的子串,如果是,则返回str2在str1中首次出现位置的地址,如果不是则返回NULL.其模拟实现代码如下: #include<iostream> using namespace std; #include<assert.h> char* my_strstr(const char* str1, const char* str2) { assert(str1&&str2); const char* p = str1; const char* q = str2; const char*start = NULL; while (*p) { start = p; while (*p&&*q&&*p == *q) { p++; q++; } if (*q == ‘0’) { return (char*)start; } p = start + 1; q = str2; } return NULL; } 测试代码: //#include<string> char str[] = “lazy”; char String[] = “The quick brown dog jumps overs the lazy fox.”; void main() { char* pdest; int result; printf(“String to be searched: %s ”, String); pdest = my_strstr(String, str); result = pdest-String + 1; if (pdest != NULL) printf(“%s is found at position %d. ”, str, result); else printf(“%s is not found ”,str); } 这个start非常关键,它保存了str2在str1中首次出现的位置。 下面我们再模拟实现一下strrstr,这个函数看起来跟strstr很像,但它又是什么功能呢?strrstr是在字符串中查找指定字符串最后一次出现的位置。其模拟实现如下: #include<iostream> using namespace std; #include<assert.h> char* my_strrstr(char* str1,char str2[]) { assert(str1&&str2); char* last = NULL; char* start = str1; int j = 0; while (*str2 == 0) { return 0; } while (*str1&&*str2) { start = str1; while (*str1&&str2[j]&&*str1 == str2[j]) { str1++; j++; } if (str2[j]== ‘0’) { last = start; } str1 = start + 1; j = 0; } if (*str1 == ‘0’) return last; else return NULL; } 测试代码: void main() { char* str1 = “abcdefcdefop”; char* str2 = “def”; printf(“%s ”, my_strrstr(str1,str2)); } 注意在实现strrstr的时候这里也有个start,这里的start存的也是匹配成功后的字符串的位置,但是随着程序的执行,如果字符串的后面继续有匹配成功的字符串,那么后面的这个地址将取代start里面原来的地址,当程序结束后,start里面存的就是字符串中查找到的指定字符串最后一次出现的位置。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/66832.html