C语言,求数组子串,洛谷

我也不知道为什么就是过不了洛谷

#include<stdio.h>
#include<string.h>
void substring(char *from,char *to,int m,int n) {
    int i=0,k;
    for(; m<=n; m++) {
        *(to+i)=*(from+m);
        i++;
    }
    for(k=0; k<=m-n; k++)
        printf("%c",*(to+k));
}//将from指向的字符串中的从第m~n的部分字符复制到to
//输出to 
int main() {
    char s1[100],s2[100];
    int m,n;
    scanf("%[^\n]\n%d %d",s1,&m,&n);
    substring(s1,s2,m,n);
}

img

修改如下,供参考:

#include<stdio.h>
#include<string.h>
void substring(char *from,char *to,int m,int n) {
    int i=0;
    for(i=0; m<=n; m++,i++)
        *(to+i)=*(from+m);
    *(to+i) = '\0';
         //for(k=0; k<=m-n; k++)
        //printf("%c",*(to+k));
}//将from指向的字符串中的从第m~n的部分字符复制到to
//输出to
int main() {
    char s1[100]={0},s2[100]={0};
    int m,n;
    scanf("%[^\n]\n%d %d",s1,&m,&n);
    substring(s1,s2,m,n);
    printf("%s",s2);
    return 0;
}

你可以看一下m和n指的时数组下标还是元素的第几个,然后看一下s的长度,最好把题目的完整要求以及输入输出的示例贴出来

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

char s[100000];

int main() {
    int m, n;
    scanf("%[^\n]\n%d %d", s, &m, &n);
    int len = strlen(s);
    for (int i = m; i <= n && i < len; i++)
    {
        printf("%c", s[i]);
    }
    return 0;
}

img

scanf("%[^\n]\n%d %d",s1,&m,&n);改为scanf("%s%d%d",s1,&m,&n);

以上仅供参考,如有任何疑问,可以评论回复,看到即回。
希望对题主有所帮助!可以的话,点个采纳!