返回子字符串的位置

来源:互联网 发布:自学php教材推荐 知乎 编辑:程序博客网 时间:2024/05/16 17:22
今天在论坛上看了个发问的帖子,是问他的那个程序编译出错是咋回事,我拷了下他的程序,发现是一些看不见的字符有问题(其他人的回答是程序里有全角空格字符),删除之后就OK了。

后来仔细再看他的程序,发现有点问题,他的那个函数原型是int func(char *str, char *substr);目的看str中是否有子字符串substr,如果有则返回第一次出现的位置,如果没有则返回-1。但我使用几组数据测试了下,发现如果substr第一个字符不在str里则返回-1,否则返回这个字符在str里的位置。我根据他的思路修改了一下,能够正确返回子字符串的位置,但由于只测试了几组数据,所以可能会有bug,先记下,后面有时间再仔细看看。
楼主:

#include <iostream>using namespace std;int func(char *str, char *substr){    char *cur = substr;    while(*str != '\0')    {        int count = 0;        if(*str == *cur)        {            while(*cur != '\0')            {                if(*cur++ == *str++)                ;                else                    break;            }            if(*cur == '\0')            return count + 1;            cur = substr;        }        else        {            str++;            count++;        }    }    return -1;}int main(){    char *str = "abcde";    char *substr = "cd";    cout << func(str, substr) << endl;    system("pause");    return 0;}

后来修改版:

#include <iostream>using namespace std;int func(char *str, char *substr){int count = -1;int temp = 0;char* cur = str;if(strlen(str) < strlen(substr)){return count;}else{bool flag = false;while(*cur != '\0'){for(unsigned int i=0; i<strlen(substr); ++i) {if(*(cur+i) == *(substr+i)){flag = true;}else{flag = false;break;}}if(flag == true){count = temp;break;}temp++;cur++;}}return count;}int main(){char *str = "abcde";char *substr = "";cout << func(str, substr) << endl;system("pause");return 0;}


原创粉丝点击