本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。

函数接口定义:

char *match( char *s, char ch1, char ch2 );

函数match应打印s中从ch1ch2之间的所有字符,并且返回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

>_code

char *match( char *s, char ch1, char ch2 )
{
    int length = 0,flag_first = 0;
    char *start = NULL;
    int i;
    while(s[length]!='\0')//获取s的长度、是否存在ch1
    {
        if(ch1 == s[length] && !flag_first)
        {
            start = &s[length];
            i = length;
            flag_first++;
        }
        length++;
    }
    if(NULL != start)//s中有ch1
    {
        for(;i<length;i++)
        {
            printf("%c",s[i]);
            if(ch2 == s[i])
                break;
        }
        putchar(10);
        return start;
    }
    putchar(10);//s中无ch1
    return s+length;
}

思路

  1. 第一行的输出:取决于ch1和ch2。那么需要遍历看下是否有ch1,有的话保存第一个ch1的地址,遍历获取数组的长度。

若有ch1,从ch1开始输出;若有ch2,输出ch2并结束输出;否则输出到末尾才结束输出。

若无ch1,需输出一个换行符。

  1. 第二行的输出:取决于ch1是否存在

若ch1存在,直接将ch1的地址返回。

若ch1不存在,需返回一个指向空字符('\0')(不是NULL)的指针,返回数组首地址s+length偏移后的地址:字符串s的结尾('\0')处。

Last modification:2021 年 03 月 31 日 00 : 55 : 53