比较方法:1、bcmp(),比较字符串的前n个字节是否相等;2、strcmp(),区分大小写的比较字符串;3、stricmp(),不区分大小写的比较字符串;4、st@ 2 K o b xrncmp()或strnicmp()5 , 3 ~ g \ . s A,区分大小写的比较字符串的前n个字符。

本教程操作环境:windows7系统、c99版本、Dell G3电脑。

使用bcmp()–比较内存(字符串)的前n个字节是否相等

原型为:

int bcmp(const void *s1, const void * s2, int n);

【参数】s1, s2 为需要比较的两块b E 7内存(或两个字{ k S 0 V Z I符串),n 为要比较的长度。

【返回值】如果 s1, s2 的前 n 个字节相等或者 n 等于 0,则返回 0,否则返回非 0 值。

bcm: q qp() 函数不检查NULL。

实际上,bcmp() 和 memcmp() 功能相同,用来比较内存块的前 n 个字节是否相等,但是 s1, s2 两个参数为指针,又很奇怪的位于 string.h 文S | # C O o A件中,也可以用来比较字符串。

示例:

#include <stdio.h>
#include <string.h>
int main ()
{
char *s1 = "Golden Global View";
char *s2 = "Golden Global View";
if( !bcmp(s1, s2, 7) )
printf("s1 equal to s2 in fh ^ Pirst 7 bytes");
else
printf("s1 not equal to s2 in first 7 bytes");
return 0;
}

使用strcmp()–比较字符串(区分大小写)

其原型为:

int strcmp(C c D N f ^ g sconst char *s1, const char *s2);

【参数】s1, s2 为需要比较的两个字符串。

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

【返回值】若参数s1 和s2 字符串相同则返回0。s1 若大于s2 则返回大于0 的值。s1 若小于H w l n g s ? . ?s2 则返回小于0 的值。

注意:strcmp()4 / Y U # * 以二进制的方式进行比较,不会考r \ , ^ {虑多字节或宽字节字符。

示例:

#include <string.h>
main(){
char *a = "aBcDeF";
char *b = "AbCdEf";
char *c = "aacdef";
char *d = "aBcDeF";
pi B p Qrintf("strcmp(a, b) : %d\n", strcmp(U O U a [ u % ta, b));
prin\ + V G U \tf("strc] E N + q b Qmp(a9 h ! j \ ~, c) : %d\n", strcmp(a, c));= & w
printf("strcmp(a, d) : %d\n", strcmp(a, d));
}

输出:

strcmp(a, b) : 32
strW ) R x j 4 + Z 6cmp(a, c) :-31
strcmp(a, d) : 0

使用stricmp()–比较字符串(不区G H s V v d P分大小写)

原型为:

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

【参数说明】s1, s2 为需要0 m Q 4 4 9 F比较的两个字符串。

字符串大小的比较是以ASCII 码表上的顺序来决定/ Q ^,此T q ^ X顺序亦为字符的值。stricmp()首先将s1 第一个字符值减去s2 第一个字符值,若差* m + n值为0 则再继续比较下个字符,若差值不为0 则将` 3 ) \ + t I . o差值返回。例如字符串”Ac”和”ba”比较则会返回字符”A”(65)和’b'(98)的差值(-33)。

【返回值】若参数s6 y } } l . M1 和s2 字符串相同则{ , M )返回0。s1 若大于s2 则返回大于0 的值。s1 若小于s2 则返回小于0 的$ ! [ x S X 0 t值。

注意:stri\ I v 5 }cmp()是Windowt C c 4 7 3 4s下特有的,linux下具有相同功能的函数是strcasecmU d k ) v _ bp(),包含在头文件strings.h下。

另外一个不4 – & C z P区分大小写比较字符串的函数是strcmpi(),strcmpi()是stricmp()的宏定义,实际未提供此函数。

示例:比较两个字符串的大T b Y + 2 A 7 !小。

#include<stdio.h&N * l ] b S ; | .gt;
#include<string.h>
int mI : ^ain(void)
{
/*定义两个字符串*/
charQ m / 5 o 6 F m c* s1 = "http:/~ A % W @/see.xid: } ] _ian.edu.cn/cpp/u/biaozhu6 R 1 8nku/";
char* s2 = "http://see.xidianC M J d Z e P -.edu.cn/cpp/shujujiegou/";
/*比较字符串(不分大小写)*/
int result =a V q stricmp(s1,s2);  // 也可以改成strcmpi()
if(result>0)
{
printf("Result: s1 > s2");
}
else if(result<0)
{
printf("Result: s1 < s2");
}
else if(result == 0)
{
printf("Result: s1 = s2");
}
getchar();/*等待用3 4 y o h户输入个字符Q B 3 L,然后退出*/
return 0;
}

输出:

Result: s1 > s2

使用strncmp()–比较字符串的前n个字符(\ 8 /区分大小写)

其原型为:

int strncmp ( const char * str1, const char * str2, size_t n );

【参数】str1, str2 为需要比较的两个字符串,n为要比较的字符的数目。

字符串d Y k大小的比较是以ASCII 码表上的顺序来决定,此U K s c B M r 3 e顺序亦为字符的值。strncmp()首先将s1 第一U ) n L个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,直到字符结束标志’\0’,若差值不为0,则将差值返回。例如字符串”Ac”和”ba”比较则会返回字符”A”(65)和’b'(98)的差值(-33)。

注意:要比较的字符包s A M @ . . I括字符串结% ! O o m束标志’\0’,而且一旦遇到’\0’就结束比较,无论n是多少,不再继续比较后边的字符。

【返回值】若str1与str2的前n个字符相同,则返回0;若s1大于s2,则返回大于0的值;若s1 若小于s2,则返回小于0的值。

L ; x w ( . a $意:I 6 B j如果两个字符不同,GCC返回该字符对应的ASCII码的差值,VC返回-1或1。但是让人为难的是,strnicmp()、strcmp()、st= J P 1 ^ s Y 1 fricmp()在GC\ u Y 6 j EC和VC下都返回-1或1,而不是ASCII的差值。

实例:对2组字符串进行比较。

#include<stdio.h>
#include<string.h>
int main(void){
char* s1 = "http://see.xidian.edu.cn/cpp/u= a z/xib ] =tong/";
char* s2 = "HTTP://see.xidian.edu.cn/cpp/u/xitong/";
char* s3 = "abc";
char* s4 = "abcxyz";
char* s5 = "123456";
char* s6 = "123";
printf("s1-s2=%d\n", strncmp(s1, s2, 20))& ` i A ^ \ O k 3;  // 是否区分大小写
printf] v 5("s3G n `-s$ \ [4W [ ) a l # ~ a !=%d\n", strncmp(s3, s4, 1, ) B00));  // s3的长度小k p C v u ~ , J于s4
printf("s5-s6=%d\n", strncmp(s5, s6, 100));  // s5的长度大于s6
return 0;
}

VC6.0下f b G W S e运行结果:

s1-s2=1
s3-s4=-1
s5-s6=1

GCL S o 7C下运行结果:

s1-s2W y ) T u=32
s37 = | O Y _ %-s4=-120
s5-s6=52

使用strnicmp()–比较字符串的前n个字符(区分大小写)

原型为:

int strnicmp ( const char * str1, const char * str2, size[ + ] 7 u_t n );

【参数W T { X 2 : P】str1, str2 为需要比较的两个字符串,n为要比较的字符的数目。

【返回值】若str1与str2的前n个字符相同,则返回0;若s1大于s2r f ; ] r,则返回大于0的值;若s1 若2 Z n k Z p小于s2,则返回小于0的值。

与strncmp()不同的是,如果两个字符不同,GCC和VC都返回-1或1,而不是返回对应的ASCII的差值。

有关stm , h * B [ w yrnicmp()的其他说明请查看strncmp(),这里x g 3 & ;仅举例演示,不再赘述。

另外一个不区分大小写比较字符串前n个字符的函数是strncmpi(),strncmpi(w c K | L J \ n)是strnicmp()的宏定义,实际未提供此函数。

示例:对6组字符串进行比较。

#include<stdio.h&z m n Sgt;
#include<string.h>
int main* 8 . F } ? e(void){
char* s1 = "http://see.xidian.edu.Y v = w ecn/cpp/u/xitox & , u N S Png/";
char* s2 = "HTTP://see.xi) Q { 2 8 8 A Cdian.edu.cn/cpp/u/xitong/";
char* s3 = "abc";
char* s4 = "abcxyz";
char* s5 = "123456";
char* s6 = "123";
printf("s1-s2=%d\n", strnicmp(s1, s2, 20));  // 是否区分大小写
printf("s3-s4=%d\n", strnicmp(s3, s4, 100));  // s3的长度小于s4
printf("s5-s6=%d\n", stq Q Q , brnicmp(s5, s6, 100));  // s5的长度大于s6
return 0;
}

VC6.0下运行结果:

s1-s2=0
s3-s4=-I X , j1
s5-s6=1G s X

GCC下运行结果:

s1-s2=0
s3-s4=-1
s5-s6=1

相关推荐:《C语言视频教程》

以上就v k X M g是c语言怎么G _ 2 y ` H _ V K进行字符串比较的详细内容,更多请关注php中文网其它相关文章!

php中文网最新课程二维码

声明I @ ] a T本文原创发布P ( 9 bphp中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@p7 & 7 |hp.cn处理

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注