目录

2025-03-11-学习记录-CC-PTA-习题11-5-指定位置输出字符串

2025-03-11 学习记录–C/C++-PTA 习题11-5 指定位置输出字符串

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻

一、题目描述 ⭐️

https://i-blog.csdnimg.cn/direct/5b5c689bc55e4b818a90a8bd668d3801.png

裁判测试程序样例:

#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

二、代码(C语言)⭐️

char *match(char *s, char ch1, char ch2) {
    int i = 0, start_index;  // 初始化计数器 i 和变量 start_index(用于记录 ch1 的位置)
    while (s[i] != ch1) {    // 遍历字符串,直到找到字符 ch1
        if (s[i] == '\0') {  // 如果遍历到字符串结尾仍未找到 ch1,退出循环
            break;
        }
        i++;                // 移动到下一个字符
    }
    start_index = i;         // 记录 ch1 的位置(索引)

    // for 循环的初始化部分可以省略 i,因为 i 已经在 while 循环中初始化。
    for (; s[i] != '\0'; i++) {  // 从 ch1 的位置开始遍历字符串
        printf("%c", s[i]);       // 打印当前字符
        if (s[i] == ch2) {        // 如果遇到字符 ch2,退出循环
            break;
        }
    }
    printf("\n");                 // 打印换行符

    return s + start_index;       // 返回指向 ch1 位置的指针
}

https://i-blog.csdnimg.cn/direct/d0b1d61a785044e4b1444acfbf0eadbc.png

https://i-blog.csdnimg.cn/direct/54a647972e224f4f90d81ba7282b79fc.jpeg