1163028233 发表于 2021-7-31 21:48:52

填空题求解

输入一个母字符串存放到字符数组str中,并输入一个起始位置loc和一个长度len。
实现从字符数组str中的母字符串的第loc位开始截取len个字符构成一个子字符串存放到字符数组substr中,
并输出字符数组substr中的子字符串,如果母字符串中从loc位开始剩余的字符个数不足len个,则
只截取母字符串中从loc位开始的剩余所有字符构成子字符串

#include<stdio.h>
int main(){
    char str,substr;
    int k=0,n,loc,len;
    gets(①);
    scanf("%d%d",&loc,&len);
    if(loc>1 || loc>strlen(str) || len<=0){
      substr='\0';
    }
    else{
      for(n=loc-1;②;③)
            substr=str;
      substr=④;
    }
    printf("Sub string is %s, its length is %d\n",substr,k);
    return 0;
}
我认为①处应该填str   因为从题目知道先得输入一个母字符串存放到字符数组str中;②处应该填 n<=81   因为要从字符数组str中的母字符串的第loc位开始截取len个字符构成一个子字符串存放到字符数组substr中;
③处填 n++要一个一个 的算字符; ④处我就不太确定了,因为按照题目中的如果母字符串中从loc位开始剩余的字符个数不足len个,则只截取母字符串中从loc位开始的剩余所有字符构成子字符串,那应该是填一个控制将不足len个的字符输入到substr中。
如果我填的不对,还请指正,谢谢

大马强 发表于 2021-7-31 23:16:40

鱼油,你这都想好了那就去动手直接实现好点

大马强 发表于 2021-8-1 00:12:06

本帖最后由 大马强 于 2021-8-1 00:17 编辑

能力有限,只能对源代码做出一点改动才能完成要求
#include<stdio.h>
#include<string.h> //strlen()好像要这个,不然会警告
int main(){
    char str,substr;
    int k=0,n,loc,len,m; // 数学能力差不能找到不改动原代码的方法,请来一个外援来限制循环
    gets(str); //正确
    scanf("%d%d",&loc,&len);
    if(loc<1 || loc>strlen(str) || len<=0) // 原来是 loc>1
        {
      substr='\0';
      printf("输入不正确!");
    }
    else{
   
            m = loc+len-1 ;
            if (loc+len-1 > strlen(str))
                    m = strlen(str) - loc +1; //当截取的长度超过母串长度,子串长度即为截取位置到母串末尾的长度
            // 子串和母串的下标要同步前移, n++,k++
      for(n=loc-1;n<m;n++,k++)
            substr=str;
      substr='\0'; //给substr加一个终字符,这样编译器读取的时候就知道读到这里就结束了
    }
    printf("Sub string is %s, its length is %d\n",substr,k);
    return 0;
}       

1163028233 发表于 2021-8-1 21:01:34

大马强 发表于 2021-8-1 00:12
能力有限,只能对源代码做出一点改动才能完成要求

#include<stdio.h>
int main(){
    char str,substr;
    int k=0,n,loc,len;
    gets(str);
    scanf("%d%d",&loc,&len);
    if(loc<1 || loc>strlen(str) || len<=0){
      substr='\0';
    }
    else{
      for(n=loc-1;k < len && str != '\0';k++,n++;)
            substr=str;
      substr='\0';
    }
    printf("Sub string is %s, its length is %d\n",substr,k);
    return 0;
}

老哥,我改成这样了。你看下对嘛

1163028233 发表于 2021-8-1 21:05:46

大马强 发表于 2021-8-1 00:12
能力有限,只能对源代码做出一点改动才能完成要求

#include<stdio.h>
int main(){
    char str,substr;
    int k=0,n,loc,len;
    gets(str);
    scanf("%d%d",&loc,&len);
    if(loc>1 || loc>strlen(str) || len<=0){
      substr='\0';
    }
    else{
      for(n=loc-1;str != '\0' && len != 0;len--,n++,k++;)
            substr=str;
      substr='\0';
    }
    printf("Sub string is %s, its length is %d\n",substr,k);
    return 0;
}

或者这样?

大马强 发表于 2021-8-1 21:25:22

你没有编译器吗?你自己运行下都可以呀

1163028233 发表于 2021-8-1 21:35:25

大马强 发表于 2021-8-1 21:25
你没有编译器吗?你自己运行下都可以呀

就是对自己不太信任.....毕竟学的不好

大马强 发表于 2021-8-1 21:44:09

哈哈哈,没事有问来问,这样会有印象点

大马强 发表于 2021-8-1 21:56:47

大概看了一遍,6哇{:10_281:}

1163028233 发表于 2021-8-1 23:01:54

大马强 发表于 2021-8-1 21:44
哈哈哈,没事有问来问,这样会有印象点

感谢感谢
页: [1]
查看完整版本: 填空题求解