题目详情
本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。
文章目录
- 一、输入样例
- 二、输出样例
- 三、代码展示
- 四、思路体现
- 五、难点记录
一、输入样例
首先输入一个字符串,然后继续输入两个字符。
1)输入样例一
program
r g
2)输入样例二
program
z o
3)输入样例三
program
g z
二、输出样例
1)输出样例一
rog
rogram
2)输出样例二
(空行)
(空行)
3)输出样例三
gram
gram
三、代码展示
1)函数接口定义:
函数
match
应打印
s
中从
ch1
到
ch2
之间的所有字符,并且返回
ch1
的地址。
char *match( char *s, char ch1, char ch2 );
2) 裁判测试程序样例:
#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;
}
/* 你的代码将被嵌在这里 */
3)/* 你的代码将被嵌在这里 */
char *match( char *s, char ch1, char ch2 )
{
while(*s!='\0'){
if(*s==ch1){
for(char *s1=s;*s1!='\0';s1++){
printf("%c",*s1);
if(*s1==ch2)break;
}printf("\n");
return s;
}s++;
}printf("\n");
return s;
}
四、思路体现
本题的结果有三种,(1)ch1、ch2都存在;(2)ch1存在、ch2不存在;(3)ch1、ch2都不存在,首先区分ch1是否存在,我们使用while从第一个字符*s依次往后循环,若是找不到ch1,直接打印’\n’,然后返回s(此时通过s++,*s==’\0′)(结果(3));若是找到,定义指针*s1,使s1=s(后面输出利用s1++,s不变,即*s==ch1),通过s1依次输出ch1后面的字符,在输出过中,若是没有找到ch2,那么返回指针s,函数结束(结果(2));若是找到ch2,在ch2出跳出循环,然后返回s(结果(1));
五、难点记录
要明确输出的几种结果,然后将思路整理清楚;(我刚刚开始写的时候,想的是把第一行字符和第二行字符放在一起,中间用’\n’隔开,然后返回首地址,但很明显,实力不足,这个方法没实现;那么换个思维,把第一行的字符在函数中实现输出,然后返回第二行的字符的首地址,这样就将难度降低了)。