鱼C论坛

 找回密码
 立即注册
查看: 1093|回复: 9

[已解决]填空题求解

[复制链接]
发表于 2021-7-31 21:48:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

#include<stdio.h>
int main(){
    char str[81],substr[81];
    int k=0,n,loc,len;
    gets(①);
    scanf("%d%d",&loc,&len);
    if(loc>1 || loc>strlen(str) || len<=0){
        substr[0]='\0';
    }
    else{
        for(n=loc-1;②;③)
            substr[k]=str[n];
        substr[k]=④;
    }
    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[k]中。
如果我填的不对,还请指正,谢谢
最佳答案
2021-8-1 00:12:06
本帖最后由 大马强 于 2021-8-1 00:17 编辑

能力有限,只能对源代码做出一点改动才能完成要求
#include<stdio.h>
#include<string.h> //strlen()好像要这个,不然会警告 
int main(){
    char str[81],substr[81];
    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]='\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[k]=str[n];
        substr[k]='\0'; //给substr加一个终字符,这样编译器读取的时候就知道读到这里就结束了 
    }
    printf("Sub string is %s, its length is %d\n",substr,k);
    return 0;
}        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-31 23:16:40 | 显示全部楼层
鱼油,你这都想好了那就去动手直接实现好点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-1 00:12:06 | 显示全部楼层    本楼为最佳答案   
本帖最后由 大马强 于 2021-8-1 00:17 编辑

能力有限,只能对源代码做出一点改动才能完成要求
#include<stdio.h>
#include<string.h> //strlen()好像要这个,不然会警告 
int main(){
    char str[81],substr[81];
    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]='\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[k]=str[n];
        substr[k]='\0'; //给substr加一个终字符,这样编译器读取的时候就知道读到这里就结束了 
    }
    printf("Sub string is %s, its length is %d\n",substr,k);
    return 0;
}        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-1 21:01:34 | 显示全部楼层
大马强 发表于 2021-8-1 00:12
能力有限,只能对源代码做出一点改动才能完成要求

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

老哥,我改成这样了。你看下对嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-1 21:05:46 | 显示全部楼层
大马强 发表于 2021-8-1 00:12
能力有限,只能对源代码做出一点改动才能完成要求

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

或者这样?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-1 21:25:22 | 显示全部楼层
你没有编译器吗?你自己运行下都可以呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-1 21:35:25 | 显示全部楼层
大马强 发表于 2021-8-1 21:25
你没有编译器吗?你自己运行下都可以呀

就是对自己不太信任.....毕竟学的不好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-1 21:44:09 | 显示全部楼层
哈哈哈,没事有问来问,这样会有印象点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-1 21:56:47 | 显示全部楼层
大概看了一遍,6哇
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-1 23:01:54 | 显示全部楼层
大马强 发表于 2021-8-1 21:44
哈哈哈,没事有问来问,这样会有印象点

感谢感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 22:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表