【字符指针】【1】字符串子串提取

我写的代码有误,不知错在哪,help

img

img


题目中原码(符号@#1等效于空格,需要填入代码)

#include 
void substring(char *str1,char *str2,int index,int length);
main()
{   int idx,len;
    char a[200], b[200]; 
    gets(a); 
    scanf("%d%d",&idx,&len);
    substring(a,b,idx,len);
    printf("%s",b);
}
void substring(char *str1,char *str2,int index,int length)
{ char *p;
  for(p=@#1;p<=@#2;p++)
   { 
    //提示:在这里,除了把str1中的相应字符复制给str2外,还需要防止str1中的字符用完
    //即当str1中的字符用完时,不再复制字符,提前break掉for循环。如何检验str1中的字
    //符是否用完呢?
    @@1
    
    @@1
   }
   @#3       //给str2添加结束符。
}

我自己写的代码,求修正

#include 
void substring(char *str1,char *str2,int index,int length);
main()
{   int idx,len;
    char a[200], b[200]; 
    gets(a); 
    scanf("%d%d",&idx,&len);
    substring(a,b,idx,len);
    printf("%s",b);
}
void substring(char *str1,char *str2,int index,int length)
{ char *p;
  for(p=str1+index;p<=str1+index+length;p++)
   {    //@#1    @#2
    //提示:在这里,除了把str1中的相应字符复制给str2外,还需要防止str1中的字符用完
    //即当str1中的字符用完时,不再复制字符,提前break掉for循环。如何检验str1中的字
    //符是否用完呢?
    //@@1
    if(*p=='\0')
    {
        break;
    }
    int i=0;
    str2[i]=*p;
    //@@1
   }
   //@#3       //给str2添加结束符。
}

这么改,供参考:

#include <stdio.h>
void substring(char* str1, char* str2, int index, int length);
int  main()
{
    int idx, len;
    char a[200], b[200];
    gets(a);
    scanf("%d%d", &idx, &len);
    substring(a, b, idx, len);
    printf("%s", b);
}
void substring(char* str1, char* str2, int index, int length)
{
    char* p;
    for (p = str1 + index; p <= str1 + index + length - 1; p++)  //for (p = @#1; p <= @#2; p++)
    {
        //提示:在这里,除了把str1中的相应字符复制给str2外,还需要防止str1中的字符用完
        //即当str1中的字符用完时,不再复制字符,提前break掉for循环。如何检验str1中的字
        //符是否用完呢?
        if (*p)          //@@1
            *str2++ = *p;
        else            //@@1
            break;    
    }
    *str2 = '\0'; //@#3  //给str2添加结束符。
}

int i=0;
str2[i]=*p;=== 你这是想干啥啊???一直对str2[0]进行赋值?

帮你修改了下程序,你看看,有疑问,可以私聊。

#include <stdio.h>
#include <string.h>
void substring(char *str1,char *str2,int index,int length);
int main()
{   int idx,len;
    char a[200], b[200]; 
    fgets(a); 
    scanf("%d%d",&idx,&len);
    substring(a,b,idx,len);
    printf("%s",b);
}
void substring(char *str1,char *str2,int index,int length)
{ char *p;
    int i=0;
  for(p=str1+index;p<=str1+index+length;p++)
   {    //@#1    @#2
    //提示:在这里,除了把str1中的相应字符复制给str2外,还需要防止str1中的字符用完
    //即当str1中的字符用完时,不再复制字符,提前break掉for循环。如何检验str1中的字
    //符是否用完呢?
    //@@1
    if(*p=='\0')
    {
        break;
    }
    //int i=0;
    str2[i++]=*p;
    //@@1
   }
   str2[i]='\0';
   //@#3       //给str2添加结束符。
}

代码改成下面这样试试:

#include <stdio.h>
void substring(char *str1,char *str2,int index,int length);
void main()
{   
    int idx,len;
    char a[200], b[200]; 
    gets(a); 
    scanf("%d%d",&idx,&len);
    substring(a,b,idx,len);
    printf("%s",b);
}
void substring(char *str1,char *str2,int index,int length)
{ 
    char *p;
    int i = 0;//这里定义i
    for(p=str1+index;p<=str1+index+length;p++)
    {    //@#1    @#2
        //提示:在这里,除了把str1中的相应字符复制给str2外,还需要防止str1中的字符用完
        //即当str1中的字符用完时,不再复制字符,提前break掉for循环。如何检验str1中的字
        //符是否用完呢?
        //@@1
        if(*p=='\0')
        {
            break;
        }
        //int i=0;
        str2[i++]=*p;//赋值
        //@@1
    }
    str2[i]='\0';
    //@#3       //给str2添加结束符。
}