百度
360搜索
搜狗搜索

用c语言编写strcmp函数,求c语言实现strcmp功能的自编程序详细介绍

本文目录一览: 求c语言实现strcmp功能的自编程序

#include

int main(){ int strcmp(char * p1,char * p2); char * s1 = "hello world"; char s2[] = "hello_world"; char s3[] = "hello world"; if(strcmp(s1,s2)==0){ printf("String s1 and s2 are equal!\n"); } else{ printf("String s1 and s2 are not equal!\n"); } if(strcmp(s1,s3)==0){ printf("String s1 and s3 are equal!\n"); } else{ printf("String s1 and s3 are not equal!\n"); } getchar(); return 0;}//自己编写的一个比较字符串的函数int strcmp(char * p1,char * p2){ for(;;) { if(*p1=='\0' && *p2=='\0'){ return 0; } if(*p1!=*p2){ return (*p1 - *p2); } p1++; p2++; }}

C语言strcmp函数是什么样的代码

strcmp(s1,s2)
相同返回0
当s1
<s2时,返回值
s2时,返回值>0 即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如: "A"<"B" "a">"A" "computer">"compare" 特别注意:strcmp(s1,s2)这里面只能比较字符串,不能比较数字等其他形式的参数。

strcmp简介:

函数原型int strcmp(const char *str1,const char *str2);

其作用为

将str1的各个字母的ASCII码与str2的进行比较。

若str1>str2则返回整数,若str1=str2返回0,否则,返回负数

一般这样调用:

if(strcmp(str1,str2)==0)...

else ...

当然,这是C语言的库函数,它的代码存储在某个库文件中。

在string.h里只是一个声明。

我给你写一下,大概是这样的:

int strcmp(const char *str1,const char *str2)

{

char *str3=str1,*str4=str2;

while(*str3++!=*str4++&&(*str3||*str4))

{

if(*--str3<*--str4)

return -1;

if(*str3>*str4) return 1;

str3++;str4++;

}

return 0;

}

网页链接

page ,132

title strcmp.asm - compare two strings

;***

;strcmp.asm - routine to compare two strings (for equal, less, or greater)

;

; Copyright (c) Microsoft Corporation. All rights reserved.

;

;Purpose:

; STRCMP compares two strings and returns an integer

; to indicate whether the first is less than the second, the two are

; equal, or whether the first is greater than the second, respectively.

; Comparison is done byte by byte on an UNSIGNED basis, which is to

; say that Null (0) is less than any other character (1-255).

;

;*******************************************************************************

.xlist

include cruntime.inc

.list

page

;***

;strcmp - compare two strings, returning less than, equal to, or greater than

;

;Purpose:

; Compares two string, determining their lexical order. Unsigned

; comparison is used.

;

; Algorithm:

; int strcmp ( src , dst )

; unsigned char *src;

; unsigned char *dst;

; {

; int ret = 0 ;

;

; while( ! (ret = *src - *dst) && *dst)

; ++src, ++dst;

;

; if ( ret < 0 )

; ret = -1 ;

; else if ( ret > 0 )

; ret = 1 ;

;

; return( ret );

; }

;

;Entry:

; const char * src - string for left-hand side of comparison

; const char * dst - string for right-hand side of comparison

;

;Exit:

; AX < 0, 0, or >0, indicating whether the first string is

; Less than, Equal to, or Greater than the second string.

;

;Uses:

; CX, DX

;

;Exceptions:

;

;*******************************************************************************

CODESEG

public strcmp

strcmp proc \

str1:ptr byte, \

str2:ptr byte

OPTION PROLOGUE:NONE, EPILOGUE:NONE

.FPO ( 0, 2, 0, 0, 0, 0 )

mov edx,[esp + 4] ; edx = src

mov ecx,[esp + 8] ; ecx = dst

test edx,3

jnz short dopartial

align 4

dodwords:

mov eax,[edx]

cmp al,[ecx]

jne short donene

or al,al

jz short doneeq

cmp ah,[ecx + 1]

jne short donene

or ah,ah

jz short doneeq

shr eax,16

cmp al,[ecx + 2]

jne short donene

or al,al

jz short doneeq

cmp ah,[ecx + 3]

jne short donene

add ecx,4

add edx,4

or ah,ah

jnz short dodwords

align 4

doneeq:

xor eax,eax

ret

align 4

donene:

; The instructions below should place -1 in eax if src < dst,

; and 1 in eax if src > dst.

sbb eax,eax

sal eax,1

add eax,1

ret

align 4

dopartial:

test edx,1

jz short doword

mov al,[edx]

add edx,1

cmp al,[ecx]

jne short donene

add ecx,1

or al,al

jz short doneeq

test edx,2

jz short dodwords

align 4

doword:

mov ax,[edx]

add edx,2

cmp al,[ecx]

jne short donene

or al,al

jz short doneeq

cmp ah,[ecx + 1]

jne short donene

or ah,ah

jz short doneeq

add ecx,2

jmp short dodwords

strcmp endp

end

C语言中strcmp函数是string库的常用函数。其原型代码和介绍如下:

1.先说一下这个函数的实现原理,向strcmp()函数中传入两个字符串(记为str1,str2).传入之后,通过把str1的各字母的ASCII码值和str2的各字母的ASCII码值进行比较。若str1>str2则返回正数,若str1=str2则返回0,否则,则返回负数。

2.下面实现代码:

3.整个函数的原型中得益于“(*str1!='\0')&&(*str1==*str2)”这一句的代码,因为这样当字符指针指向空,意味着字符串已经移动到最后了,比较结束,此时可以退出循环。而如果两个字符串不相等时,则此时函数也可以退出了。

扩展资料:

这个函数要注意一下几点:

①使用*(unsigned char*)str1而不是用*str1。这是因为传入的参数为有符号数,有符号字符值的范围是-128~127,无符号字符值的范围是0~255,而字符串的ASCII没有负值,若不转化为无符号数这回在减法实现时出现错误。

②While循环中ret=*(unsigned char*)str1-*(unsigned char*)str2) && *str1,最后与上str1也可以换成str2,因为前面已经做了相减,无论哪个先为‘\0’都会退出。因为最后与上str1是为了判断str1是否结束,即是否为‘\0’。

③这个函数没有判断参数为NULL时的情况,所以当传入NULL时程序会崩溃。网上看别人说商业化代码都会在调用strcmp前先判断是否为NULL,所以可以不用判断NULL;我在VC6上测试string.h中的strcmp(NULL,NULL),程序也会崩溃。这里可以根据实际情况来决定。

参考资料来源:百度百科-strcmp函数
</s2时,返回值

阅读更多 >>>  三星s8怎么开超级省电

C语言中:strcmp函数如何使用?

#include

#include

int main()

{

char ch1[2] = "a";

char ch2[2] = "k";

int result = strcmp(ch1, ch2);

if( result > 0 )

{

printf("a要大\n");

}

else if( result < 0 )

{

printf("k要大\n");

}

else

{

printf("相等\n");

}

return 0;

}

单个字符的话其实可以直接比较,strcmp是比较字符串的,返回值是他们的差值,如果等于0说明相等。其他可以参考百科或MSDN

函数原型:extern int strcmp(const char *s1,const char *s2);

函数功能:以ascii码值比较两个字符串的大小,当s1

s2时,返回正数。

头文件:#include

参数说明:两个比较字符串的首地址指针。

注意事项:strcmp(const char *s1,const char * s2)这里面只能比较字符串,即可用于比较两个字符串常量,或比较数组和字符串常量,不能比较数字等其他形式的参数。

就是对两个字符串从左到右逐个字符相比,按ASCII值大小比较,如果出现不同字符或遇到'\0'为止,如果全部字符相等;则认为相等,如果不相等的,按第一个不相等的字符的比较结果为准,

如strmp(str,str),则函数值为0,如果strmp(stra,strb)因为a的askii小于b的,所以函数值为一个负数。

strcmp简介:

函数原型int strcmp(const char *str1,const char *str2);

其作用为

将str1的各个字母的ASCII码与str2的进行比较。

若str1>str2则返回整数,若str1=str2返回0,否则,返回负数

一般这样调用:

if(strcmp(str1,str2)==0)...

else ...

当然,这是C语言的库函数,它的代码存储在某个库文件中。

在string.h里只是一个声明。

我给你写一下,大概是这样的:

int strcmp(const char *str1,const char *str2)

{

char *str3=str1,*str4=str2;

while(*str3++!=*str4++&&(*str3||*str4))

{

if(*--str3<*--str4)

return -1;

if(*str3>*str4) return 1;

str3++;str4++;

}

return 0;

}

字符串比较函数,两个字符串,从第一个字符开始比,如果相同,继续向下比,如果不同,看这两个字符的ASCII码,如果第一个字符串的比较大,则返回1,否则返回-1;

  原型:extern int strcmp(const char *s1,const char * s2);

  用法:#include

  功能:比较字符串s1和s2。

  相关函数:wcscmp

  一般形式:strcmp(字符串1,字符串2)

  说明:

  当s1
<s2时,返回值<0
  当s1=s2时,返回值=0

  当s1>s2时,返回值>0

  即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:

  "A"<"B" "a">"A" "computer">"compare"

  特别注意:strcmp(const char *s1,const char * s2)这里面只能比较字符串,不能比较数字等其他形式的参数。
</s2时,返回值<0

C语言编程strcmp函数的问题

如果a>b,strcmp(a,b)返回的是>0;
如果a==b,strcmp(a,b)返回的是0;
如果a
<b,strcmp(a,b)返回的是<0;
你可以方便记忆成strcmp(a,b)的结果就是a-b。a比较大的话结果自然就是>0

#include

#include

int main()

{

char str1[100],str2[100];

printf("input 2 strings: ");

scanf( "%s %s", str1,str2 ); /eg: hello world

if(strcmp(str1,str2)< 0)printf("str1
<str2");
else if(strcmp(str1,str2) > 0)printf("str1 > str2");

else

printf("str1 == str2");

printf("\n");

return 0;

}

if(strcmp(str1,str2)==0)printf("str1==str2");

strcmp()函数原型是

int strcmp(const char *s1,const char *s2)如果s1的字符串在机器编码顺序中落后于s2,函数返回值是一个大于0的整数;如果两个字符串相同的话,返回值是0;如果第一个字符串在机器编码顺序中先于第二个字符串,返回值是一个<0的数。

看函数的返回值类型是 int,那么你就可以定义一个int 值来表示,例如

int cmp=strcmp(s1,s2)cmp>0说明s2>s1;

cmp=0说明s2=s1;

cmp<0说明s2
<s1;
或者可以直接使用

if(strcmp(str1,str2))作为判断条件。
</s1;
</str2");

</b,strcmp(a,b)返回的是<0;

c语言定义函数实现strcmp功能

void main()
{
char a[10],b[10],c[10];
gets(a);
gets(b);
c[0]=strcmp(a,b); //返回值只有一个字符
printf("%c",c[0] );
}
在C语言中可以通过定义一个函数来实现这个功能,比如:
int compare(char a[22],b[22])
{
int i=0;
while(a[i]==b[i]&&i<22)
i++;
if(i==21) return 1;
else return 0;
}
就这么多就行了,strcmp函数返回的值是如果比较相同则返回0,否者返回非零值,上面我定义的函数遵循这一规则。
用的时候有两种方法:
1》先声明,后主函数调用,再最后写上上面的定义函数
2》先定义上面的函数,主函数直接调用(这样不用声明了)

C语言编程-用数组方法编写函数strcmp,比较两个字符串的大小。

#include

#include

char

*fun(char

*s,char

*t)//对两个字符串比较

{

char

*ss=s,*tt=t;

while((*ss)&&(*tt))

{

ss++;tt++;

}

if(*tt)

return(t);

else

return(s);

}

main(){

char

a[20],b[10],*p,*q;

int

i;

printf("Input

1th

string:");

gets(a);

printf("Input

2th

string:");

gets(b);

printf("%s\n",fun(a,b));

//打印结果

system("pause");

}

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

#include

// 将字符串s中的内容拷贝到d中,包括字符串结束符'\0'

char *strcpy(char *d, constchar *s)

{

char *p = d;

while (1)

{

*p = *s;

if (*p == '\0') break;

阅读更多 >>>  小米5s触屏校准在哪里

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;

}

⒈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 );

}

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;

}

这是strcpy的,你类似的可以做出strcmp的,思路是通过指针遍历字符串进行操作。

strcpy(a,b):

#include

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;

}

/*

** copy t to s

*/

strcpy(char *s,char * t)

{

char *d;

d = s;

while (*s++ = *t++) ;

return(d);

}

/*

** return <0, 0, >0 aUording to

** s

t

*/

strcmp(char *s,char * t)

{

while(*s == *t) {

if(*s == 0) return (0);

++s; ++t;

}

return (*s - *t);

}

也是在网上看到的,具体的出处找不到了。

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;}

阅读更多 >>>  乐视1s是骁龙处理器吗

[C语言] 关于strcmp函数的用法。万分感谢!

这样吧,我简单给你说一下你应该就能懂了
"computer">"compare"中computer的第一个字母(c)和compare中的第一个字母(c)比较,如果对应的ASCII相同的话就进行第二个字母的比较,这样依次下去知道比较到不同的或是比较完为止。
而“dbase” “C Language”中第一个字母就不相同了,d对应的ASCII为100,而C对应的ASCII为67,然后就直接停止比较了,所以结果为“dbase”>“C Language”,现在知道了吧
strcmp的函数代码实现模拟为如下:
#include

int

strcmp(char

*str1,char*str2)

{

char

*

p1=str1,

*p2=str2;

while(*p1

&&

*p2)

{

if(*p1>*p2)

{

return

1;

}

else

if(*p1<*p2)

{

return

-1;

}

p1++;

p2++;

}

if(*p1==0

&&

*p2==0)

{

return

0;

}

else

if(*p1==0

&&

*p2!=0)

{

return

-1;

}

else

{

return

1;

}

}

void

main()

{

printf("%d\n",strcmp("hello1","hello"));

printf("%d\n",strcmp("computer","compare"));

printf("%d\n",strcmp("dbase","C

Language"));

}

请自己看代码,也简单。

第一个前面都相等, 比到第5个字符的时候u > a 所以前一个字符串大于后一个

第二个比到第一个字符 d > C 所以前一个比较大

strcmp的函数代码实现模拟为如下:

#include

int strcmp(char *str1,char*str2)

{

char * p1=str1, *p2=str2;

while(*p1 && *p2)

{

if(*p1>*p2)

{

return 1;

}

else if(*p1<*p2)

{

return -1;

}

p1++;

p2++;

}

if(*p1==0 && *p2==0)

{

return 0;

}

else if(*p1==0 && *p2!=0)

{

return -1;

}

else

{

return 1;

}

}

void main()

{

printf("%d\n",strcmp("hello1","hello"));

printf("%d\n",strcmp("computer","compare"));

printf("%d\n",strcmp("dbase","C Language"));

}

请自己看代码,也简单。

1:首先,比较字符c,相同,在比较o,还相同...比较u与a,不同!u的ASC码比a大,立即返回,返回一个正数,后面的就没有必要再比较了

2:道理相同,d的ASC比C大,所以立即返回

明白了没?

strcmp的原型是int strcmp(const char *s1, const char *s2),s1、s2都被const修饰,可见函数体中对两个字符串进行只读操作。

比较从左至右按字符一一对应进行,遇到不等时得出结果,停止操作;无论哪个字符串先到达'\0','\0'也参与比较。

当s1的某个字符的ASCII值>s2对应字符的ASCII值时,函数返回+1,反之返回-1,当s1、s2完全一样(等长,对应字符相同)时返回0。

举例代码如下:

//#include "stdafx.h"//If the vc++6.0, with this line.#include "stdio.h"#include "string.h"int main(void){ char *s1="12345fjksld;ajfkl;",*s2="12a",*s3="12a"; printf("s1<-->s2: %d\n",strcmp(s1,s2));//输出-1,说明大小不由长度确定 printf("s2<-->s3: %d\n",strcmp(s2,s3));//长度和字符对应相等是才输出0 printf("s2<-->s1: %d\n",strcmp(s2,s1));//是参数1与参数2对比而不是相反 printf("\n"); return 0;}

C语言字符串处理函数strcmp

原型:extern
int
strcmp(char
*s1,char
*
s2);
用法:#include
功能:比较字符串s1和s2。
说明:
当s1
s2时,返回值>0
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。
长度>元素个数的时候,由于a[5]位置为\0。所以函数结束返回0。
长度=元素个数的时候,由于字符串最后\0结束字符没有空间放了。比较a[5],b[5]空间的字符时候,就无法确定大小了。
长度>元素个数的时候,可以查看a[5]和b[5]的ASCII值,为0.
strcmp是比较古老的函数了,它就是在检查'\0'为结尾的字符串,你的字符数组位置为5时,没有位置来存储'\0',所以函数strcmp检查时候不会停止,会继续向后面检查(后面的地址没有赋值,都是随机的数,直到遇见'0'),所以不会相等。

网站数据信息

"用c语言编写strcmp函数,求c语言实现strcmp功能的自编程序"浏览人数已经达到18次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:用c语言编写strcmp函数,求c语言实现strcmp功能的自编程序的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!