子字符串插入到主字符串指定位置的问题 for循环下为什么str3[i]=*str1;str1++;不行

[复制链接]
查看11 | 回复2 | 2011-3-28 05:07:02 | 显示全部楼层 |阅读模式
#include "stdio.h"
main()
{
int i,j,k,n;
char str1[20],str2[20],str3[40];
printf("主字符串:");
gets(str1);
printf("子字符串:");
gets(str2);
printf("起始位置:");
scanf("%d",&n);
for(i=0;i<n;i++)
str3=str1;
for(j=0;str2[j]!='\0';j++)
str3[i+j]=str2[j];
for(k=n;str1[k]!='\0';k++)
str3[j+k]=str1[k];
str3[j+k]='\0';
printf("\n结果字符串:%s\n",str3);
}

回复

使用道具 举报

千问 | 2011-3-28 05:07:02 | 显示全部楼层
第一个for后,i 的值为 要插入的位置 n(即 i = n ),此时串str3的长度是 n ;2、执行第二个for后,j 的值是 串str2的长度,此时串str3的长度是 n + j (也可以是 i + j );3、第三个for语句的作用是将 以n为起始位置的串str1的字符 拷贝到 str3的起始位置第n + j位置上;
执行第三个for循环前,k 初始值为 n,所以 str3的起始位置是k + j ;当然了,如果要用i+j+k,可以将第三个for语句改成: for(k=0; str1[n+k]!='\0';k++)str3[i+j+k]=str1[i+k];
回复

使用道具 举报

千问 | 2011-3-28 05:07:02 | 显示全部楼层
str1是数组名是个常量地址,不可以str1++。如果是指针,存储的仍然是地址,但是是可变的,所以可以偏移运算,str1++自然可以了。
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行