6-10 使用函数实现字符串部分复制 (20 point(s))

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

这是 拼题A(PTA)《中M2019秋C入门和进阶练习集》的习题。原题在 https://pintia.cn/problem-sets/1163286449659043840/problems/1174288506294865929 (侵删)
本人的答案仅供交流学习,请勿用于当作答案来提交!

题目描述:
6-10 使用函数实现字符串部分复制 (20 point(s))
本题要求编写函数,将输入字符串t中从第m个字符开始的全部字符复制到字符串s中。

函数接口定义:

void strmcpy( char *t, int m, char *s );

函数strmcpy将输入字符串char *t中从第m个字符开始的全部字符复制到字符串char *s中。若m超过输入字符串的长度,则结果字符串应为空串。

裁判测试程序样例:

#include 
#define MAXN 20

void strmcpy( char *t, int m, char *s );
void ReadString( char s[] ); // 由裁判实现,略去不表 int main()
{
    char t[MAXN], s[MAXN];
    int m;

    scanf("%d\n", &m);
    ReadString(t);
    strmcpy( t, m, s );
    printf("%s\n", s);

    return 0;
}

// 你的代码将被嵌在这里

输入样例:
7
happy new year
输出样例:
new year

我的答案:

/*================================================================
*   Copyright (C) 2019 程序知路. All rights reserved.
*   
*   Filename    :6-10-使用函数实现字符串部分复制.c
*   Author      :程序知路
*   E-Mail      :admin@icxzl.com
*   Create Date :2019年09月26日
*   Description :
================================================================*/
#include 
#define MAXN 20

void strmcpy( char *t, int m, char *s );
void ReadString( char s[] ); // 由裁判实现,略去不表

int main()
{
    char t[MAXN] = "happy new year";
    char s[MAXN];
    int m;

    scanf("%d", &m);
    //ReadString(t);
    strmcpy( t, m, s );
    printf("%s\n", s);

    return 0;
}

// 以下是有效代码
#include 
void strmcpy(char *t, int m, char *s) {
    if (m - 1 >= (int)strlen(t))
        *s = '\0';
    else {
        t = t + m - 1;

        while (*t != '\0' && (*s = *t))
            t++, s++;

        *s = '\0';
    }
}

程序知路

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

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

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