不太明白为什么最后返回ch1的地址为什么是$而且还会溢出、
#include <stdio.h>
#define MAXS 10
char *match( char *s, char ch1, char ch2 );
int main()
{
char str[MAXS], ch_start, ch_end, *p;
scanf("%s\n", str);
scanf("%c %c", &ch_start, &ch_end);
p = match(str, ch_start, ch_end);
printf("%s\n", p);
return 0;
}
/* 你的代码将被嵌在这里 */
char *match( char *s, char ch1, char ch2 )
{
char* p,* q;
p=s;
q=&ch1;
while(*p++)
{
if(*p<=ch1&&*p>=ch2)
{
printf("%c",*p);
}
}
printf("%s",q);
return q;
}
scanf后用户手动回车被读入了,为了避免错误读入,scanf前先getchar()捕捉到无用的回车,在scanf读入。
代码如下,仅供参考!谢谢
#include <stdio.h>
#define MAXS 20
char *match( char *s, char ch1, char ch2 );
int main()
{
char str[MAXS], ch_start, ch_end, *p;
scanf("%s", str);
getchar();
scanf("%c %c", &ch_start, &ch_end);
p = match(str, ch_start, ch_end);
printf("%s\n", p);
return 0;
}
/* 你的代码将被嵌在这里 */
char *match( char *s, char ch1, char ch2 )
{
//char *p,*q;
int index1=-1; //记住起始索引位置
int i=0;
char *p=s,*q=NULL;
//q=&ch1;//逻辑上有点问题
for(;*(p+i)!='\0';i++)
{
//if(*p<=ch1 && *p>=ch2)
//这判断语句不符合逻辑!
if(*(p+i)==ch1 && index1==-1)
{
index1=i;
}
if(*(p+i)==ch2 && i>=index1)
{
*(p+1+i)='\0';
break;
}
}
q=p+index1;
return q;
}