在一个字符串的任意位置上插入一个字符
**要求:**插入字符的位置由用户从键盘输入。
分析:
首先提醒用户输入一段字符串;
输入要添加的字符;
输入要添加的位置(第几个字符的后面);
将添加后的数组向后移动一位,
其余不变。
源程序一(不用指针):
从strlen(s)开始,position结束,将最后一位向后移动,将倒数第二位移动到最后一位,直到position这个位置,从后面开始移动不会影响到数组内容,如果是从前面开始,则会对后面的数组进行覆盖,会对结果造成影响。
#include<stdio.h>
#include<string.h>
int main(void)
{
int i, position;
char c, str[100];
printf("请输入字符串str\n");
gets(str);
printf("\ns字符串为%s\n", str);
printf("\n请输入要插入的字符\n");
c = getchar();
printf("请输入要插入字符的位置,第几个字符的后面(0--%d)\n", strlen(s));
scanf_s("%d", &position);
for (i = strlen(str); i >= position && i >= 0; i--)
/*从strlen(str)开始,position结束,将最后一位向后移动,将倒数第二位移动到最后一位,直到position这个位置*/
{
str[i + 1] = str[i];
}
str[i + 1] = c;
printf("\n插入字符后字符串str:%s\n", str);
return 0;
}
源程序二(使用指针)
#include <stdio.h>
#include <string.h>
void insert(char str[], char c, int n) /*数组名代表了该数组在内存中的起始地址,当数组名做函数参数时,实参与形参之间传递的就是数组的起始地址,通过地址改变实参所指向的数据*/
{
int i = 0;
if (n >= 0 && n <= strlen(str))
{
/*从strlen(str)位置开始,到位置n结束,将最后一位向后移动,将倒数第二位移动到最后一位,直到位置n*/
for (i = strlen(str); i >= n; i--)
{
*(str + i+1) = *(str + i); /*将位置n后面的所有元素向后移一位*/
}
*(str + n ) = c; /*在位置n处插入输入的值*/
}
}
int main(void)
{
char str[100], c;
int position, i;
printf("请输入字符串str\n");
gets(str);
printf("\nstr字符串为%s\n", str);
printf("\n请输入要插入的字符\n");
c = getchar();
printf("请输入要插入字符的位置,第几个字符的后面(0--%d)\n", strlen(str));
scanf_s("%d", &position);
insert(str, c, position); /*数组名代表了该数组在内存中的起始地址,当数组名做函数参数时,实参与形参之间传递的就是数组的起始地址,通过地址改变实参所指向的数据*/
puts(str);
/*for (i = 0; i < strlen(str); i++)
printf("%c", str[i]);*/
return 0;
}
程序运行结果如下图所示: