也许用链表比较好实现,下面是用数组实现的程序:
#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 ) //输出字符串
}
方法一 使用stdio函数库提供的char函数,这里我们在MSDN离线版上学习一下其用法 可以看到,gets()用于从标准输入流读入一个整行(以’\n’或EOF)结束,写入ptr指向的字符数组,并返回这个指针出错或遇到文件结束时则返回NULL。 行末的’\n’从流中取出,但不写入数组。 gets()不检查被写入的数组大小。 所以我们可以很容易写出如下代码: #include<stdio.h>intmain(){charstr[25]={0}gets(str)printf("%s\n",str)return0} 实现后: 方法二 这里使用一个scanf函数提供的“%[]”格式来输入,这个格式可以让我们进行多字符的输入,同时决定输入结束的字符,只需要使用**^+我们需要停止的字符**下面为大家实际 *** 作一波: #include<stdio.h>intmain(){charstr[25]={0}scanf("%[^\n]",str)printf("%s\n",str)return0} 实现后: 我们甚至可以凭借%[ ^EOF ]来控制字符串的持续输入 。c[5]只有5个空间无法完全容纳字符串"hello",因为这个字符串需要占用6个字符位置。所谓自动加'\0'的问题是:你写在双引号中的,编译程序会认为是字符串,会自动为你添加上一个字符串结尾符号0,而不是运行时添加的。
如果你用debug方式运行程序,调试环境自动会把你开设的char
a[5]进行初始化0的工作,这时你再将第1位初始化时,后面的0仍存在就好象字符串结尾已经存在了。如果非debug运行则没有这个初始化工作。
如果你用字符方式初始化应当写:char
c[6]={
'h','e','l','l','o','\0'
}
希望对你能有所帮助。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)