|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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: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;
- }
复制代码
|
|