本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。
函数接口定义:
char *match( char *s, char ch1, char ch2 ); 
函数match应打印s中从ch1到ch2之间的所有字符,并且返回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; } /* 你的代码将被嵌在这里 */ 
输入样例1:
program
r g
 
输出样例1:
rog
rogram
 
输入样例2:
program
z o
 
输出样例2:
(空行)
(空行)
 
输入样例3:
program
g z
 
输出样例3:
gram
gram 
char *match( char *s, char ch1, char ch2 )
{
    int i,flag=0;
    char *p;
    for(i=0;*(s+i)!='\0';i++)
    {
        if(*(s+i)==ch1)//找ch1
        {
            p=s+i;//便于返回地址
            flag++;
            break;
        }
    }
    if(flag==0)
    {
        
        return "\n";//都没找到
    }
    else
    {
        for(;*(s+i)!='\0';i++)
        {
            if(*(s+i)==ch2)
            {
                printf("%c\n",*(s+i));
                flag++;
                break;
            }
            else
            {
                printf("%c",*(s+i));
            }    
        }
        if(flag==1)
        {
            printf("\n");
        }    
    }    
    return p;
}    
 
难点在于可能的情况较多,需要考虑周全。可以先根据是否找到ch1作情况的区分,其次是ch2的区分,若没有找到ch2需要手动加上换行,找到ch2的时候输出并换行即可 。还有一个地方是都没有找到是只需要return '\n'即可,不需要printf.










