Manchester


私信TA

用户名:wenyajie

访问量:332879

签 名:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

等  级
排  名 1
经  验 65686
参赛次数 1
文章发表 188
年  龄 0
在职情况 学生
学  校 Xiamen University
专  业 计算机科学

  自我简介:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

解题思路:
①:创建一个结构体,包含字符串头结点指针和字符串的长度

typedef struct String_{

   char *data;
   int length;
}*String,STRING;


②:创建这样结构体类型的两个变量A,B

③:为A.data 和B.data 分配空间大小为128

④:输入两个字符串,以空格为分界线 ,输入插入的位置pos(位置为以pos为下标的字符的前面一个)

⑤:判断插入的位置是否合法

if(pos>=1&&pos<=A.length+1)
/*从第一个字符前面的一个位置pos=1,到最后一个字符后面的一个位置pos=A.length+1都是合法插入位置*/

⑥:判断插入后长度是不是大于127,大于的话,重分配空间

 if(A->length+B->length>127)
     A->data=(char *)realloc(A->data,(A->length+B->length+1)*sizeof(char));

⑦:给B串腾出空间

/*把A中从下标为pos-1开始的所有字符向后移动B->length个长度*/
   for(int i=A->length;i>=pos-1;i--)
       A->data[i+B->length]=A->data[i];

⑧:插入字符串B

for(int j=0,k=pos-1;j<B->length;j++)
       A->data[k++]=B->data[j];



注意事项:
要malloc分配的空间才能再分配,否则运行错误


参考代码:

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

typedef struct String_{

   char *data;
   int length;
}*String,STRING;

void insert_(String A,String B,int pos);
void get_length(String x);

int main()
{


    int pos;
    STRING A,B;

    A.data=(char *)malloc(128*sizeof(char));
    B.data=(char *)malloc(128*sizeof(char));

     while(scanf("%s",A.data)!=EOF)
        {
            scanf("%s",B.data);
            get_length(&A);
            get_length(&B);

            scanf("%d",&pos);

            if(pos>=1&&pos<=A.length+1)
              insert_(&A,&B,pos);
              /*输出插入后的字符串*/
              puts(A.data);

        }
return 0;
}

/*---------------------------------------*/
void insert_(String A,String B,int pos)
{
   if(A->length+B->length>127)
     A->data=(char *)realloc(A->data,(A->length+B->length+1)*sizeof(char));
   
   /*把A中从下标为pos-1开始的所有字符向后移动B->length个长度*/
   for(int i=A->length;i>=pos-1;i--)
       A->data[i+B->length]=A->data[i];

    /*插入B*/
    for(int j=0,k=pos-1;j<B->length;j++)
       A->data[k++]=B->data[j];

}
/*---------------------------------------*/
void get_length(String x)
{
  x->length=strlen(x->data);
}

别忘点赞哦-.-!

 

0.0分

9 人评分

  评论区

  • «
  • »