直接看代码:
#include
#include
void main()
{
char str[100],str_new[100],t;
char *p=str;
int at=0;
puts("输入字符串:");
gets(str);
puts("要插入的字符:");
t=getchar();/*.输入的字符被存放在键盘缓冲区中.直到按回车为止(回车字符也放在缓冲区中);其他字符会保留在键盘缓存区中,等待后续getchar调用读取*/
fflush(stdin);//刷输入新缓存区的内容
puts("插入的位置:");
scanf("%d",&at);
if(at>strlen(str))
{ puts("输入长度应该小于字符串长度!");
return;
}
int j=0;
for(int i=0;str[i]!=0;i++)//新的字符串在这个for()生成
{
if(i==at-1)
str_new[j++]=t;
str_new[j++]=str[i];
}
str_new[j]='\0';
puts(str_new);
}
这里使用生成新数组的for循环较简洁,但是要新定义一个数组,有一定的系统开销,读者也可以用其它的方法。
1 strlen是C库函数,需要包含头文件
2、3 insert函数采用的算法是,如果需要插入的字符串是空串,那么直接赋值即可;否则,先将需要插入的字符串的前面部分复制到新字符串中(strncpy(string,s,i)
),插入字符到新字符串(string[i]=t ; string[i+1]='\0';),再将后面部分附加到新字符串(strcat(string,(s+i)); //i是s字符串偏移)
你这份代码有相当多的错误,附一份修改后的,insert2为insert的另一个简短版本
#include
#include
void insert(char s[],char t,int i);
void insert2(char s[],char t,int i);
int main()
{
char 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);
}
void insert(char s[],char t,int i)
{
char string[100];
if(!strlen(s))
{
string[0]=t;
string[1]='\0' ;
}
else
{
strncpy(string,s,i) ;
string[i]=t;
string[i+1]='\0';
strcat(string,(s+i));
}
strcpy(s,string);
}
void insert2(char s[],char t,int i)
{
int j = strlen (s) ;
while (j >= i)
s[j+1] = s[j--] ; //从第i个字符往后移动一个位置。如s="abc" i=0,移动后s="aabc"
s[i] = t ;
}
程序我加了一下,这样输入的字符那里都能插了
#include
#include
void main()
{
char str[100],str_new[100],c[10];
char t;
//char*p;
int at=0;
int i=0,j=0;
puts("输入字符串:");
gets(str);
puts("要插入的字符:");
t=getchar();
puts("插入的位置:");
scanf("%d",&at);
if(at>strlen(str))
{
puts("输入长度大于字符串长度放在最后面!");
c[0]=t;
c[1]='\0';
printf("%s",strcat(str,c));
printf("\n");
return;
}
//新的字符串在这个for()生成
//数组不初始化,其元素默认为0;
for(i=0;str[i]!='\0';i++)
{
if(i==at-1)
str_new[j++]=t;
str_new[j++]=str[i];
}
str_new[j]='\0';
puts(str_new);
printf("\n");
}