在屏幕上输入一个字符串和一个要插入的字符,并输入要插入的位置, 会在指定位置插入字符并输出
#include<stdio.h>
#include<string.h>
insert(int s[],char t,int i);
main()
{
int str1[100],c;
int position;
printf("please input string:\n");
gets(str1);
printf("piease input a char:\n ");
scanf("%c",&c);
printf("please input position:\n");
scanf("%d",&position);
insert(str1,c,position);
puts(str1);
}
insert(int s[],char t,int i)
{
int string[100];
if(!strlen(s))
string[0]=t;
else
{
strncpy(string,s,i)
string[i]=t;
string[i+1]='\0';
strcat(string,t);
strcat(string,(s+i));
strcpy(s,string);
}
}
我有三个地方不懂1.这句!strlen(s)是什么意思。
2.string[i]=t;
string[i+1]='\0';
strcat(string,t);
不是已经将t和\0赋给srting吗,为什么还要用strcat。
3. strcat(string,(s+i))我知道是将s剩余的字符连接到string,但为什么是用s+i。
麻烦大神帮我解答
直接看代码:
#include<stdio.h>这里使用生成新数组的for循环较简洁,但是要新定义一个数组,有一定的系统开销,读者也可以用其它的方法。
1 strlen是C库函数,需要包含头文件<string.h>,作用是求一个字符串的大小,返回值为无符号整数。比如一个字符串strlen(“hello”),那么返回5。在C中,0表示假,其他任何数表示真,!expr表示这个表达式为假,即strlen(s)返回值为0。if(!strlen(s))即如果字符串为空串
2、3 insert函数采用的算法是,如果需要插入的字符串是空串,那么直接赋值即可;否则,先将需要插入的字符串的前面部分复制到新字符串中(strncpy(string,s,i)
),插入字符到新字符串(string[i]=t ; string[i+1]='\0';),再将后面部分附加到新字符串(strcat(string,(s+i)); //i是s字符串偏移)
你这份代码有相当多的错误,附一份修改后的,insert2为insert的另一个简短版本
请问那个简短版本insert2中 s[j+1] = s[j--],我不太理解。用你举的例子s=abc,j=3,也就是s[4]=s[2],那就只有2对应的字符移到4的位置,那其他字符没有移动啊。望大神帮我解释一下。
追答这是个while循环,当j大于等于i的时候,便一直循环
j--是在运算之后再减1
"abc\0"
s[4] = s[3] //"abc\0\0"
s[3] = s[2] //"abcc\0"
s[2] = s[1] //"abbc\0"
s[1] = s[0] //"aabc\n"
再插入到第0个位置
s[0] = x