Strrep()是将字符串中的某一子字符串用另一个子字符串的内容来替换。 此法并不会改变字符串的长度,若替换的子字符串较原子字符串长,则会覆盖掉原字符串中的内容。
Strins()是将欲插入的字符串插入至原字符串中的某个位置,插入完成后,字符串的总长度会是两个字符串的总和。
Strdel()是从s1某个特定的位置pos开始,依某长度len删除子字符串。
#include <stdio.h>
#include <string.h>
char *Strrep(char *s1,char *s2,int pos)//字符串的取代
{
int i,j;
pos--;//计算取代的起始位置,减1使其成为索引值(从0计数)
i=0;
for (j=pos;s1[j]!='/0';j++)//从取代的起始位置开始
{
if (s2[i]!='/0')
{
s1[j]=s2[i];//进行取代
i++;
}
else
{
break;
}
}
return s1;
}
char *Strins(char *s1,char *s2,int pos)//字符串的插入
{
int s1_length,s2_length;
int i,j;
pos--;
s1_length=strlen(s1);
s2_length=strlen(s2);
for (i=s1_length;i>=pos;i--)//将插入位置之后的所有字符往后移,以空出s2所需的字符长度
{
s1[i+s2_length]=s1[i];
}
for (j=pos;s2[j-pos]!='/0';j++)//将字符串s2的内容填入所空出的字符串s1中
{
s1[j]=s2[j-pos];
}
return s1;
}
char *Strdel(char *s,int pos,int len)//字符串的删除
{
int i;
pos--;
for (i=pos+len;s[i]!='/0';i++)//从pos开始删除字符串
{
s[i-len]=s[i];
}
s[i-len]='/0';
return s;
}
void main()
{
char string1[100];
char string2[50];
char string3[100];
char string4[50];
char string[50];
char temp[5];
int position1;
int position2;
int position3;
int length;
printf("/nPlease input original string:");
gets(string1);
printf("/nPlease input substitute string:");
gets(string2);
printf("/nPlease input substitute position:");
scanf("%d",&position1); //输入取代的起始位置(从1计数)
gets(temp);//此处的gets()用于接收前一输入行末尾的“回车符”
Strrep(string1,string2,position1);
printf("/nThe final string:%s/n",string1);
printf("/nPlease input original string:");
gets(string3);
printf("/nInsertion string:");
gets(string4);
printf("/nInsertion position:");
scanf("%d",&position2); //输入插入字符串的起始位置(从1计数)
gets(temp);//此处的gets()用于接收前一输入行末尾的“回车符”
Strins(string3,string4,position2);
printf("/nThe final string:%s/n",string3);
printf("/nPlease input original string:");
gets(string);
printf("/nPlease input delete position:");
scanf("%d",&position3); //输入欲删除的起始位置(从1计数)
printf("/nPlease input delete length:");
scanf("%d",&length); //输入欲删除字符串的长度
Strdel(string,position3,length);
printf("/nThe final string:%s/n",string);
}
总结:gets()函数的连用问题:gets()用于输入一行字符串,中间可以有空格,以回车结束。上述函数中在scanf之后加了一个gets函数, 原因是:利用scanf函数从键盘接收一字符时,它只读入字符本身,而把字符后的回车符留在输入缓冲区内,该回车符被gets函数当作键入字符串的第一个字符读入,gets函数遇到回车符后就停止读入,因此string3为一空字符串.因此在前面再定义一个字符数组temp,然后在scanf 函数之后增加一条gets(temp)语句,以接收前一输入行末尾的“回车符”,保证下一行字符串输入的正确接收.