也许用链表比较好实现,下派悄面是用数组实现的程序:
#include<stdio.h>
#include<string.h>
main()
{inti,j,k,m,n
chara[100],b[100],c
gets(a)
gets(b)
c=getchar()
m=strlen(a)
for(i=0i<mi++)
{if(a[i]==c)<br/>break<br/>}
if(i>=m)
{printf("出错!\n")<br/>return<br/>}
n=strlen(b)
k=m
for(j=m+nj>ij--,k--)
a[j]=a[k]
for(j=i,k=0j<n+ij++,k++)
a[j]=b[k]
printf("%s\n",a)
}
设计过程:
定义两个字符埋羡歼串s2,s2,字符k
输入两个字符串s1、s2和s1中任意字符k
先遍历s1找到指定字符k,记录下当前位置
从k字符开始,按s2的长度后移其余的数据
将s2拷贝到k所在的位置
输出s1。
代码如下:
#include <stdio.h>
#include <string.h>
void main()
{
char s1[100]
char s2[20]
char k
int i,pos,len
printf("input s1: ")scanf("%s", s1 )
printf("input s2: ")scanf("%s", s2 弯冲)
getchar()//滤掉回车符
printf("input k: ")scanf("%c", &k )
for( i=0s1[i]i++ )
if ( s1[i]==k )
break
}
pos=i //记录下待插入的位置
len=strlen(s2) //得到s2长度
for( i=strlen(s1)i>=posi-- ) //后移字符串
{
s1[i+len]=s1[i]
}
strncpy( &s1[pos], s2, len ) //插入数据
printf("%s\n", s1 ) //输出字符串
}
#include <stdio.h>#include <string.h>
#define N 100
void insertChar(char s[], char c)
{
int n,i,j
for (i = 0 s[i] != '\0' i++ )
{
if (s[i] >= '0' && s[i] <='9')
{
n = strlen(s)
s[n+1] = '\0'
for(j= n j>i+1 j--)
{
s[j] = s[j -1]
}
s[i+1] = c
}
}
}
int main(int argc, char *argv[])
{
char str[N]
gets(str)
insertChar(str,getchar())
puts(str)
return 0
}
我又做了下修改,代码如下
#include <stdio.h>#include <string.h>
#define N 100
void insertChar(char s[], char c)
{
int n,i,j
for (i = 0 s[i] != '\0' i++ )
冲桥{
if (s[i] >= '0' && s[i] <='9')
{
侍判帆 n = strlen(s)//计算字符串长度,不包括'\0'
for(j= n j>i j--)
{
s[j+1] = s[j]//以s[i]为界限,将s[i+1]至结尾后移
老雹 }
s[i+1] = c
}
}
}
int main(int argc, char *argv[])
{
char str[N]
gets(str)//非常危险的函数,从键盘输入一字符串,以回车结束,并将回车替换为'\0'
insertChar(str,getchar())
puts(str)
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)