乔治爱啃脚趾 发表于 2023-12-25 20:08:17

求助

编写程序,要求:

(1)定义函数char *substrcpy(char *str1,int m,char *str2),其功能是将字符串str1中第m个字符开始的所有字符复制成一个新的字符串str2,函数substrcpy返回新字符串的首地址。若m大于字符串的长度,则函数返回NULL。

(2)在主函数中输入一个字符串,再输入m的值,调用函数substrcpy得到一个新的字符串并输出;若不能得到新的字符串,则输出“Data error!”。

FishC 发表于 2023-12-25 20:08:29

好的,下面是实现上述功能的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *substrcpy(char *str1, int m, char *str2) {
    int len = strlen(str1);// 获取字符串长度

    // 判断m是否大于字符串长度
    if (m > len) {
      return NULL; // 返回NULL表示出错
    }

    int i = 0;
    for (; i < len - m; i++) {
      str2 = str1;   // 复制字符到新的字符串中
    }
    str2 = '\0';   // 字符串末尾加上结束符'\0'

    return str2;   // 返回新字符串的首地址
}

int main() {
    char str1;
    printf("请输入一个字符串:");
    scanf("%s", str1);

    int m;
    printf("请输入m的值:");
    scanf("%d", &m);

    char *str2 = (char *)malloc(strlen(str1) + 1);   // 动态分配内存给新字符串
    char *result = substrcpy(str1, m, str2);

    if (result == NULL) {
      printf("Data error!\n");
    } else {
      printf("得到的新字符串为:%s\n", result);
    }

    free(str2);   // 释放新字符串所占的内存

    return 0;
}

希望能够帮助你解决问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

sfqxx 发表于 2023-12-25 21:02:09

下面是一个C程序的例子,它会实现您所描述的要求:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *substrcpy(char *str1, int m, char *str2){
    int length = strlen(str1);
    if (m > length) {
      return NULL;
    }
    strcpy(str2, str1 + m - 1);
    return str2;
}

int main(void){
    char str1;
    printf("输入字符串:\n");
    gets(str1);
    int m;
    printf("输入m的值:\n");
    scanf("%d", &m);
    char *str2 = malloc(100 * sizeof(char));
    str2 = substrcpy(str1, m, str2);
    if (str2 == NULL){
      printf("Data error!\n");
    }else{
      printf("新的字符串为:%s\n", str2);
    }
    free(str2);
    return 0;
}
这个程序首先从用户那里获取一个字符串和一个整数。然后,它会调用我们定义的函数substrcpy来获取一个新的字符串,该字符串从原始字符串的第m个字符开始。如果m大于字符串的长度,那么我们将输出一个错误消息。否则,我们将输出新的字符串。我们需要用malloc为新的字符串分配内存,完成后记得用free释放内存。

注意,这个程序中的字符串的索引是从1开始的,第m个字符对应的索引是m-1。

求最佳答案{:10_254:}
页: [1]
查看完整版本: 求助