百度
360搜索
搜狗搜索

strcmp函数代码,C语言 strcmp详细介绍

本文目录一览: C语言 strcmp

经过
char *s1="ABCDEF", *s2="aB"; s1++; s2++;这两条语句后,现在 s1 为"BCDEF",s2 为"B"。
strcmp() 函数功能如下:
strcmp(s1, s2):若 s1==s2,则返回值为零;若 s1

s2,则返回值为某个正数。

大致相当于这段代码(来源 glibc):

intSTRCMP (const char *p1, const char *p2){ const unsigned char *s1 = (const unsigned char *) p1; const unsigned char *s2 = (const unsigned char *) p2; unsigned char c1, c2; do { c1 = (unsigned char) *s1++; c2 = (unsigned char) *s2++; if (c1 == '\0') return c1 - c2; } while (c1 == c2); return c1 - c2;}在这个例子中,进入循环,首先比较第零个字符,发现'B'与'B'相等,继续比较第一个字符,'C'和 0('\0')不相等,跳出循环,最终输出结果为'C'-0=67。

在某些环境下,strcmp() 函数遇到第一个不相等字符时,若 c1>c2 始终输出 1,若 c1
<c2 始终输出 -1,若 c1="=c2" 0,所以最终输出结果为 1。
s1++; s2++;后,s1指向了"ABCDEF"中的B,s2指向了"aB"中B。strcmp比较的是两个字符串,这里就是"BCDEF"和"B",显然前者大于后者,所以输出是1而不是0。

strcmp函数是怎样用的?

strcmp函数用于两个字符串的比较,具体用法如下:
1、strcmp函数接受两个字符串类型的参数传入,根据比较结果返回一个int类型的值。
2、若返回结果的值小于 0,则表示在ASCII码上, str1字符串 小于 str2字符串。
3、若返回结果返回值 大于0,则代表 str2字符串 小于 str1字符串。
4、只有当返回值 为0时,两个字符串才是相同的。
扩展资料:
该函数只能用于比较字符串,不能比较数字等其他形式的参数,否则会报错。
根据ANSI的标准,函数的返回值为正数,负数,0 。不同的C返回的数值会有所不同。当两个字符串不相等时,C的标准没有规定返回值会是 1 或 -1,只规定了正数和负数。
通常情况下,会将两个字符的 ASCII 码之差作为比较结果由函数值返回。因此使用函数进行逻辑判断时应特别注意。
参考资料:
strcmp-百度百科
int strcmp(const char *s1,const char * s2);
所在头文件:string.h
功能:比较字符串s1和s2。
一般形式:strcmp(字符串1,字符串2)
说明:
当s1
<s2时,返回值<0
当s1==s2时,返回值=0

当s1>s2时,返回值>0

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

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

所在头文件:string.h

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

一般形式: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)这里面只能比较字符串,不能比较数字等其他形式的参数。

一例实现代码:

#include

#include

#undef strcmp

int strcmp (p1, p2)

{

const char *p1;

const char *p2;

{

register const unsigned char *s1 = (const unsigned char *) p1;

register const unsigned char *s2 = (const unsigned char *) p2;

unsigned reg_char c1, c2;

do{

c1 = (unsigned char) *s1++;

c2 = (unsigned char) *s2++;

if (c1 == '\0')

return c1 - c2;

}

while (c1 == c2);

return c1 - c2;

}

libc_hidden_builtin_def (strcmp)

strcmp的作用是比较字符串1和字符串2的长度大小的

例如:strcmp(str1,str2);

strcmp("sdkfj″,″Kfnksdj″);

比较的结果由函数值带回

(1)

如果字符串1=字符串2,函数值为0。

(2)

如果字符串1>字符串2,函数值为一正整数。

(3)

如果字符串1
<字符串2,函数值为一负整数。
int ret = strcmp(s1,s2)

如果ret == 0;说明s1和s2相等;

如果ret < 0;说明s1小于s2;

ret > 0;s1大于s2;

strcmp是按照两个字符串的每个字符的asscii码比较的

strcmp函数用法:

strcmp() 用来比较字符串(区分大小写),其原型为:int strcmp(const char *s1, const char *s2);s1, s2 为需要比较的两个字符串。

字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strcmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,若差值不为0 则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。

举例:

#include

main(){

char *a = "aBcDeF";

char *b = "AbCdEf";

char *c = "aacdef";

char *d = "aBcDeF";

printf("strcmp(a, b) : %d\n", strcmp(a, b));

printf("strcmp(a, c) : %d\n", strcmp(a, c));

printf("strcmp(a, d) : %d\n", strcmp(a, d));

}

输出结果:

strcmp(a, b) : 32

strcmp(a, c) :-31

strcmp(a, d) : 0

扩展资料:

strcmp使用规则:

一、当两个字符串不相等时,C标准没有规定返回值会是1 或 -1,只规定了正数和负数。有些实现会返回1或-1,但将返回值与1或-1做比较的人,都是不合格的程序。

二、有些会把两个字符的ASCII码之差作为比较结果由函数值返回。但无论如何不能以此条依据作为程序中的流程逻辑。

参考资料来源:百度百科—strcmp

阅读更多 >>>  小米2S真的会降价吗?

</字符串2,函数值为一负整数。

</s2时,返回值<0
</s2时,返回值<0

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时,返回值

阅读更多 >>>  三星s20有红外遥控吗

C语言strcmp函数

两个字符串自左向右逐个字符相比,出现不同的字符b和B
s1>s2,返回正数;
因为ASCII码中B在b后面
原型:int strcmp(const char firststring[], const char secondstring);
功能:比较两个字符串firststring和secondstring
例程:
#include

#include

void main(void)

{

  char buf1[] = "aaa";

  char buf2[] = "bbb";

  char buf3[] = "ccc";

  int ptr;

  ptr = strcmp(buf2,buf1);

  if(ptr > 0)

   cout <<"Buffer 2 is greater than buffer 1"<
<endl;
  else

   cout <<"Buffer 2 is less than buffer 1"<
<endl;
  ptr = strcmp(buf2,buf3);

  if(ptr > 0)

   cout <<"Buffer 2 is greater than buffer 3"<
<endl;
  else

   cout <<"Buffer 2 is less than buffer 3"<
<endl;
}

运行结果是:Buffer 2 is less than buffer 1

Buffer 2 is greater than buffer 3

帮我写一个简易的strcmp函数(C语言)。

int strcmp_s(char *src,char*des){if(src==NULL||des==NULL) return NULL;while((*src++==*des++)!='\0');if(*src=='\0') return 0;return (*src-*des);}
① c的strcmp简洁实现可以是这样的:
int strcmp(const char* s1, const char* s2){ while(*s1 && (*s1==*s2)) s1++,s2++; return *(const unsigned char*)s1-*(const unsigned char*)s2;}② strcmp的返回值可以有3种,即<0, =0, >0 (任意一个数值),代表的含义分别是: str1 strcmp用的是二进制比较,意思是按字典顺序,比如: 字母a < 字母 b;而a > A。 (这是因为a的ascii码是97,而A的是65)。
理解了这个,上面的代码就好理解了。 while就是s1,s2从头到位一个一个字符的比较。如果s1为空,或者s1不等于s2,则中断循环 (s1不为空,s2为空,则是*s1 != *s2,退出循环)。返回值是循环中断时的字符(分别s1和s2对应的位置,*s1-*s2, 如果是上面说的 'a' - 'A', 那么返回的就是97-65=32),那么意味着a在A前面, strcmp > 0。
之所以先转换成const unsigned char*再作减法,是由于c的char有三种: char, signed char 和unsigned char。 char就是'a'这样的, 而 signed char 则是-127~126之间的数值,而unsigned char则是0~255之间的一个值。 转换成unsigned char就是要“确保” 'a' ---> 97。 你要不转换,也是可以的。
说明一点,很多c的lib实现,比如gnu c, 都是把结果处理成: -1, 0, 1, 而不是这个字符对应的ascii码的差值。

strcmp函数 string类型

e..先说明一下,strcmp函数是对于C风格的char* 字符串的操作,而且需要头文件cstring.h
但是string类的话是C++风格的string函数库,需要头文件string.h,他里面已经帮助用户自己实现了函数符的重载,比如你的问题
int e = strcmp(a,"bcd");
对于a string类型操作char*的方法是不行的,你可以定义a为const,这样在函数内部实现的时候可以把string类型转化为char*的
strcmp是标准C的库函数,而string是C++标准库的类,C函数当然不支持C++类的。
唯一的办法就是把
string a = "bcd";换成 char *a = "bcd"; 或者char a[]="bcd";
把第二行改成 int e = strcmp(a.c_str(),"bcd"); 就可以了
  strcmp函数:
  C/C++函数,比较两个字符串
  设这两个字符串为str1,str2,
  若str1==str2,则返回零;
  若str1>str2,则返回正数;
  若str1
<str2,则返回负数。
  

  函数原型:

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

  实现代码:

  #include

  #includ e

  #undef strcmp

  int strcmp(p1,p2)

  {

  const char *p1;

  const char *p2;

  

  register const unsignedchar *s1=(constunsignedchar*)p1;

  register const unsignedchar *s2=(constunsignedchar*)p2;

  unsigned reg_charc1,c2;

  do{

  c1=(unsigned char)*s1++;

  c2=(unsigned char)*s2++;

  if(c1=='\0')

  returnc1-c2;

  }while(c1==c2);

  return c1-c2;

  }

  libc_hidden_builtin_def(strcmp)

  最正宗的源码

  /*strcmp function*/

  #include

阅读更多 >>>  苹果6splus的手电筒在哪里

I

  int(strap)(const char *sl,const char *s2)

  {

  /*compare unsigned char sl[],s2[]*/

  for(;*sl==*s2;++sl,++s2)

  if(*sl=='\0')

  return(0);

  return((*(unsignedchar*)sl<*(unsignedchar*)s2)?-1:+1);

  }

  strcmp另外的源代码如下:

  

  int __cdecl strcmp(const char *src,const char *dst)

  {

  int ret=0;

  while(!(ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)

  ++src,++dst;

  if(ret<0)

  ret=-1;

  else if(ret>0)

  ret=1;

  return(ret);

  }

  

</str2,则返回负数。

strcmp函数怎么写?

int strcmp(const char* str1, const char* str2)
{
int ret = 0;
while(!(ret=*(unsigned char*)str1-*(unsigned char*)str2) && *str1)
{
str1++;
str2++
}
if (ret < 0)
{
return -1;
}
else if (ret > 0)
{
return 1;
}
return 0;
}
要从内存的角度去看这个问题
首先,int
strcmp(char
*s,char
*t)这个函数的参数是2个指针分别指向内存的2个不同位置
for(
;
*s
==
*t;s++,t++)
是使得2个指针比较,相同就向后移动
if(*s
==
0)
return
0
指针为空,返回false.
不为空返回2指针内存的地址差
result = strcmp(char *s, char *t);
比较数组 s 和数组 t 的大小,s>t,result>0;
s=t,result=0;
s
<t,result<0;
int _strcmp(char *s, char *t) /*_strcmp避免与内置函数strcmp冲突*/

{

for(;*s==*t;s++,t++)

if(*s==0)

return 0;

return *s-*t;

}
</t,result<0;

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

1、cmp

compare,比较的缩写。
2、strcmp是c语言中头文件

(字符串函数)中定义的一个用于对两组字符串进行比较的函数,它的返回值是int类型。

假设有两组字符串cs和ct,当cs

ct时,函数返回一个正数。

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

,"a">"a"

,"computer">"compare"

,"comput">"comp"

strcmp函数原型为:int

strcmp(const

char

*s1,const

char

*

s2);

strcmp(s1,s2)

相同返回0

当s1

s2时,返回值>0

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

"A"<"B"

"a">"A"

"computer">"compare"

特别注意:strcmp(s1,s2)这里面只能比较字符串,不能比较数字等其他形式的参数。

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

}

网站数据信息

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