C语言 不使用库函数,编写函数strcpy和strcmp

不使用库函数,编写函数strcpy和strcmp... 不使用库函数,编写函数strcpy和strcmp 展开
 我来答
风若远去何人留
2016-01-04 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20403 获赞数:450164
专业C/C++软件开发

向TA提问 私信TA
展开全部

1 strcpy为字符串复制函数。

实现strcpy函数,需要将源字符串各个值依次赋值到目标字符串上,到\0为止。

代码如下:

char *strcpy(char *dst, const char *src)
{
    char *p=dst;
    while(*src)
        *p++=*src++;
    *p = '\0';
    return dst;
}


2 strcmp为字符串比较函数。

int strcmp(const char *a, const char *b);

需要依次对字符串元素按照ascii码值对比,如果完全相同返回0.

如果不同,对第一个不同的字符比较,如果第一个参数的ascii码值较大,则返回1,否则返回-1.

代码如下:

int strcmp(const char *a, const char *b);
{
    while((*a||*b) && *a==*b) a++,b++;
    if(*a<*b)return -1;
    return *a>*b;
}
dufenglei908
推荐于2018-02-27 · TA获得超过6373个赞
知道大有可为答主
回答量:1449
采纳率:60%
帮助的人:902万
展开全部
#include <stdio.h>

// 将字符串s中的内容拷贝到d中,包括字符串结束符'\0'
char *strcpy(char *d, constchar *s)
{
char *p = d;
while (1)
{
*p = *s;
if (*p == '\0') break;

p++;
s++;
}

return p;
}

// 按ascii码比较字符串a和b的内容大小,a > b返回正整数,a < b返回负整数,a == b返回0
int strcmp(constchar *a, constchar *b)
{
while(*a != '\0' && *a == *b)
{
a++;
b++;
}

return (int)(*a - *b);
}

// 测试这两个自定义函数
int main()
{
char s[20];
char *p = "abc";
char *q = "ab";

strcpy(s, p);

printf("%s\n", s);
printf("%d\n", strcmp(p, q));

return 0;
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-03-18
展开全部
⒈strcpy的实现代码
char * strcpy(char * strDest,const char * strSrc)
{
char * strDestCopy=strDest; //[3]
if ((strDest==NULL)||(strSrc==NULL)) //[1]
throw "Invalid argument(s)"; //[2]
while ((*strDest++=*strSrc++)!='\0'); //[4]
return strDestCopy;
}
int __cdecl strcmp (
const char * src,
const char * dst
)
{
int ret = 0 ;
while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst&&*src)
++src, ++dst;
if ( ret < 0 )
ret = -1 ;
else if ( ret > 0 )
ret = 1 ;
return( ret );
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
巴黎是小沫
2013-03-18 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:68
采纳率:0%
帮助的人:59.9万
展开全部
strcpy是32位32位拷的...它的函数流程用C语言表示大概是这样的。

char * _cdecl strcpy1(char * dest,const char * source){
int edx;
int eax;
int ecx = 0;
if(!((int )(&source)&3)){
while(1){
edx = 0x7efefeff;
eax = ((int *)source)[ecx];
edx +=eax;
eax ^=-1;
eax ^=edx;
edx = ((int *)source)[ecx];
if(!(eax = 0x81010100)){
((int *)dest)[ecx] = edx;
ecx+=1;
continue;
}
if(!((char *)(&edx))[0]){
dest[ecx*4+2]=((char *)(&edx))[ecx];
return dest;
}
else if(!((char *)(&edx))[1]){
((int *)dest)[ecx] = (short )edx;
return dest;
}
else if(!((char *)(&edx))[2]){
(((int *)dest)[ecx]) = (short )edx;
dest[ecx*4+2]=0;
return dest;
}
else if(!((char *)(&edx))[3])
{
((int *)dest)[ecx] = edx;
return dest;
}
else
{
((int *)dest)[ecx] = edx;
ecx+=1;
continue;
}
}
}else
return NULL;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
oxBamBooxo
2013-03-18 · 超过14用户采纳过TA的回答
知道答主
回答量:37
采纳率:0%
帮助的人:30.4万
展开全部
这是strcpy的,你类似的可以做出strcmp的,思路是通过指针遍历字符串进行操作。
strcpy(a,b):
#include <stdio.h>
int main()
{
char a[20]="hello,",b[20]="world!",*p=a,*q=b;
int i=0,j;
while(1)
{
if(*(q+i)==0) break;
i++;
}
for(j=0;j<=i;j++)
{
*(p+j)=*(q+j);
}
printf("%s",p);
system("pause");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式