今天在论坛上看了个发问的帖子,是问他的那个程序编译出错是咋回事,我拷了下他的程序,发现是一些看不见的字符有问题(其他人的回答是程序里有全角空格字符),删除之后就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;
}