strcpy_STR是正转还是反转

strcpy_STR是正转还是反转模拟实现strstr和strrstrstrstr函数用于判断str2是否是str1的子串,如果是,则返回str2在str1中首次出现位置的地址,如果不是则返回NULL.其模拟实现代码如下:#include<iostrea

模拟实现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

(0)
上一篇 2024年 8月 9日 上午8:23
下一篇 2024年 8月 9日 上午8:26

相关推荐

关注微信