这是判断短字符串是否在长字符中,并返回在长字符串中的位置吗?
(1)外层while中的条件不需要判断短字符串。
(2)每次循环,short_str_i 需要重置为0
(3)内层while需要判断长字符和短字符串是否已经到结尾。
代码修改如下:
#include <stdio.h>
const char* My_strstr(const char *long_str,const char* short_str)
{
int long_str_i = 0;
int short_str_i = 0;
const char *start = NULL;
while ((long_str[long_str_i] != '\0') ) //判断长字符和短字符是否接收到‘\0’
{
//外循环
start = &long_str[long_str_i]; //定义从那个地方开始
short_str_i = 0;//这里重置0
while (long_str[long_str_i]!='\0' &&short_str[short_str_i] !='\0' && long_str[long_str_i] == short_str[short_str_i]) //内循环
{
long_str_i++;
short_str_i++;
}
if (short_str[short_str_i] == '\0') //如果短字符接收到'\0'返回到起始位
{
return start;
}
//start++;//这一句没用
long_str_i=long_str_i+1; //长字符往后偏移
//short_str_i =short_str+1;
//short_str_i=0;//段字符串停止
}
return NULL; //返回
}
完整代码及测试代码如下:
#include <stdio.h>
const char* My_strstr(const char *long_str,const char* short_str)
{
int long_str_i = 0;
int short_str_i = 0;
const char *start = NULL;
while ((long_str[long_str_i] != '\0') ) //判断长字符和短字符是否接收到‘\0’
{
//外循环
start = &long_str[long_str_i]; //定义从那个地方开始
short_str_i = 0;//这里重置0
while (long_str[long_str_i]!='\0' &&short_str[short_str_i] !='\0' && long_str[long_str_i] == short_str[short_str_i]) //内循环
{
long_str_i++;
short_str_i++;
}
if (short_str[short_str_i] == '\0') //如果短字符接收到'\0'返回到起始位
{
return start;
}
//start++;//这一句没用
long_str_i=long_str_i+1; //长字符往后偏移
//short_str_i =short_str+1;
//short_str_i=0;//段字符串停止
}
return NULL; //返回
}
int main()
{
char longstr[100],shortstr[20];
const char* p;
scanf("%s %s",longstr,shortstr);
p = My_strstr(longstr,shortstr);
printf("%s",p);
return 0;
}