6-17 指定位置输出字符串 (20 point(s))

By | 最新修改:2024-08-17

声明

这是 拼题A(PTA)《中M2019秋C入门和进阶练习集》的习题。原题在https://pintia.cn/problem-sets/1163286449659043840/problems/1174288506294865936 (侵删)

本人的答案仅供交流学习,请勿用于当作答案来提交!

题目描述

6-17 指定位置输出字符串 (20 point(s))

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

函数接口定义:

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

函数match应打印s中从ch1到ch2之间的所有字符,并且返回ch1的地址。

裁判测试程序样例:

#include 

#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

我的答案

/*================================================================
*   Copyright (C) 2019 程序知路. All rights reserved.
*   
*   Filename    :6-17-指定位置输出字符串.c
*   Author      :程序知路
*   E-Mail      :admin@icxzl.com
*   Create Date :2019年10月15日
*   Description :
================================================================*/
#include 

#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* pCh1;
    char* pCh2;
    char* temp;

    for (pCh1 = s; *s != '\0' && (pCh1 = s) && ch1 != *s; ++ s)
        ;

    if (*s == '\0') {
        *pCh1  = '\0';
    }

    if (ch1 == *s) {
        ++ s;
        for (; *s != '\0' && (pCh2 = s) && ch2 != *s; ++s)
            ;

        if (*s == '\0') {
            temp = pCh1;
            while (*temp != '\0') {
                putchar(*temp);
                ++ temp;
            }
        }

        if (ch2 == *s) {
            temp = pCh1;
            while (temp != pCh2) {
                printf("%c", *temp);
                ++ temp;
            }

            printf("%c", *temp);
        }
    }
    printf("\n");

    return pCh1;
}


程序知路

鉴于本人的相关知识储备以及能力有限,本博客的观点和描述如有错漏或是有考虑不周到的地方还请多多包涵,欢迎互相探讨,一起学习,共同进步。

本文章可以转载,但是需要说明来源出处!

本文使用的部分图片来源于网上,若是侵权,请与本文作者联系删除: admin@icxzl.com