[从读代码来理解数组]编写一个程序,将一个字符串s2插入到字符串s1中,其起始插入位置为n。

编写一个程序,将一个字符串s2插入到字符串s1中,其起始插入位置为n。

重点:

计数方式

#include <stdio.h>
#include <string.h>
#define N 100
int main()
{  	 	 	  		   
    int n, i, j, k, len;
    char s1[N], s2[N], s3[2 * N];
    printf("main string:");
    gets(s1);
    printf("sub string:");
    gets(s2);
    len = strlen(s1);
    do
    {  	 	 	  		   
        printf("site of begining:(<=%d)", len);
        scanf("%d", &n);
    }
    while (n > len);//如果输入的n比本身的长度大就需要重新输入!可以插入第零位和第最后一位
    for (i = 0; i < n; i++)//其起始插入位置为n --> 意味着一直到n的还是原来的数组
    {  	 	 	  		   
        s3[i] = s1[i];
    }
    for (j = 0; s2[j] != '\0'; j++)//从s2的第一个开始,下标为零
    {  	 	 	  		   
        s3[i + j] = s2[j];
    }
    for (k = n; s1[k] != '\0'; k++)//因为之前是从n开始替代的,从n开始往后接上s1的后半截数组,此时s3下标的计数方式也改变了.
    {  	 	 	  		   
        s3[j + k] = s1[k];
    }
    s3[j + k] = '\0';//保证后续不出现乱码,结束
    printf("After instert:%s\n", s3);
    return 0;
}  	 	 	  		   

代码结果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

自己之前做的时候写的代码,略有不同

#include <stdio.h>
#include <string.h>
int main()
{
    char a[100],b[100],c[200];
    printf("main string:");
    gets(a);
    printf("sub string:");
    gets(b);
    long m = strlen(a),k = strlen(b);
    int n;
    printf("site of begining:(<=%d)",(int)m);
    scanf("%d",&n);
    
    
    
    int i;
    for( i = 0;i < k + m ;i++ )
    {
        if(i < n)
        {
            c[i] = a[i];
        }
        else if(i < n+k)//这个k一开始被记错了
        {
            c[i] = b[i-n];
        }
        else
        {
            c[i] = a[i-k];
        }
    }
    c[i] ='\0';
    printf("After instert:%s\n" ,c);
}



代码结果:
在这里插入图片描述


版权声明:本文为weixin_46456339原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。