求教C++strcmp函数的用法???
问题同上booloperator>(String&string1,String&string2){if(strcmp(string1.p,string2.p)>0)请教这...
问题同上
bool operator>(String&string1,String&string2)
{
if(strcmp(string1.p,string2.p)>0) 请教这里的>0是什么意思?
return true;
else return false;
} 展开
bool operator>(String&string1,String&string2)
{
if(strcmp(string1.p,string2.p)>0) 请教这里的>0是什么意思?
return true;
else return false;
} 展开
5个回答
展开全部
int
strcmp(char
*src,char
*dst)
函数功能:
比较两个字符串是否相等。
函数解析:
这个函数,在VC的库函数中的定义如下:
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
);
}
我们需要留意的是这个函数的循环部分,
while(
!
(ret
=
*(unsigned
char
*)src
-
*(unsigned
char
*)dst)
&&
*dst)
++src,
++dst;
VC的库函数似乎非常喜欢在while循环的判断条件中做一些处理(strcpy等函数的定义中也可看到这样的循环语句),下面我们来分析一下这样做的妙处。
首先,在第一次进行循环条件的判定之前,不管这个循环条件是否满足,都会执行一次这个处理(用src的值减去dst的值)。这和do~while循环有一定的相似性。
do
{
ret
=
*(unsigned
char*)src
-
*(unsigned
char*)dst;
src++;
dst++;
}while(
(0=ret)
&&
*dst
);
再者,它又比do~while循环多做了一次处理。当循环的最后一次条件判断,不满足循环条件时,do~while直接跳出了,而将处理写在判断条件中,在最后一次判断条件不满足时也会做一次处理。因为将处理内容放在while循环的判断条件中时,是先做处理,再做判断,然后才使变量递增;而do~while循环的顺序是先做处理,再做变量递增,最后做条件判断(循环比前者少做了一次);while循环的顺序是先做判断,再做处理,最后做变量递增。这中间的顺序不同导致的循环次数不同,功能执行语句执行的次数也各不相同。
strcmp
—
二进制安全字符串比较
说明
int
strcmp(
string
$str1
,
string
$str2
)
注意该比较区分大小写。
参数
str1第一个字符串。
str2第二个字符串。
返回值
如果
str1小于
str2,返回负数;如果
str1大于
str2,返回正数;二者相等则返回
0。(相等时返回0)
示例:
<?php
$var1="Hello";
$var2="Hello";
if(strcmp($var1,$var2)==0)
{echo'相等';
}
else
{
echo'不相等';
}
?>
strcasecmp
—
二进制安全比较字符串(不区分大小写)
int
strcasecmp(string$str1,string$str2)
str1
第一个字符串。
str2
第二个字符串。
返回值:
如果
str1
小于
str2
返回
<
0;
如果
str1
大于
str2
返回
>
0;如果两者相等,返回
0。
示例
:
<?php
$var1="Hello";
$var2="hello";
if(strcasecmp($var1,$var2)==0){
echo'$var1
is
equal
to
$var2
inacase-insensitive
string
comparison';
}
?
strcmp(char
*src,char
*dst)
函数功能:
比较两个字符串是否相等。
函数解析:
这个函数,在VC的库函数中的定义如下:
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
);
}
我们需要留意的是这个函数的循环部分,
while(
!
(ret
=
*(unsigned
char
*)src
-
*(unsigned
char
*)dst)
&&
*dst)
++src,
++dst;
VC的库函数似乎非常喜欢在while循环的判断条件中做一些处理(strcpy等函数的定义中也可看到这样的循环语句),下面我们来分析一下这样做的妙处。
首先,在第一次进行循环条件的判定之前,不管这个循环条件是否满足,都会执行一次这个处理(用src的值减去dst的值)。这和do~while循环有一定的相似性。
do
{
ret
=
*(unsigned
char*)src
-
*(unsigned
char*)dst;
src++;
dst++;
}while(
(0=ret)
&&
*dst
);
再者,它又比do~while循环多做了一次处理。当循环的最后一次条件判断,不满足循环条件时,do~while直接跳出了,而将处理写在判断条件中,在最后一次判断条件不满足时也会做一次处理。因为将处理内容放在while循环的判断条件中时,是先做处理,再做判断,然后才使变量递增;而do~while循环的顺序是先做处理,再做变量递增,最后做条件判断(循环比前者少做了一次);while循环的顺序是先做判断,再做处理,最后做变量递增。这中间的顺序不同导致的循环次数不同,功能执行语句执行的次数也各不相同。
strcmp
—
二进制安全字符串比较
说明
int
strcmp(
string
$str1
,
string
$str2
)
注意该比较区分大小写。
参数
str1第一个字符串。
str2第二个字符串。
返回值
如果
str1小于
str2,返回负数;如果
str1大于
str2,返回正数;二者相等则返回
0。(相等时返回0)
示例:
<?php
$var1="Hello";
$var2="Hello";
if(strcmp($var1,$var2)==0)
{echo'相等';
}
else
{
echo'不相等';
}
?>
strcasecmp
—
二进制安全比较字符串(不区分大小写)
int
strcasecmp(string$str1,string$str2)
str1
第一个字符串。
str2
第二个字符串。
返回值:
如果
str1
小于
str2
返回
<
0;
如果
str1
大于
str2
返回
>
0;如果两者相等,返回
0。
示例
:
<?php
$var1="Hello";
$var2="hello";
if(strcasecmp($var1,$var2)==0){
echo'$var1
is
equal
to
$var2
inacase-insensitive
string
comparison';
}
?
展开全部
函数 strcmp(s1,s2) 对字符串s1和s2进行比较,返回比较结果--相等返回0,s1>s2时返回正数,s1<s2时返回负数
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就是对两个字符串从左到右逐个字符相比,按ASCII值大小比较,如果出现不同字符或遇到'\0'为止,如果全部字符相等;则认为相等,如果不相等的,按第一个不相等的字符的比较结果为准,
如strmp(str,str),则函数值为0,如果strmp(stra,strb)因为a的askii小于b的,所以函数值为一个负数。
如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;
}
函数原型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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2016-01-02 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
函数简介
原型:extern int strcmp(const char *s1,const char * s2);
所在头文件:string.h
功能:比较字符串s1和s2。
一般形式:strcmp(字符串1,字符串2)
说明:
当s1<s2时,返回为负数 注意不是-1
当s1==s2时,返回值= 0
当s1>s2时,返回正数 注意不是1
注:c++ 中
当s1<s2时,返回为负数 注意不是-1
当s1==s2时,返回值等于0
当s1>s2时,返回正数 注意不是1
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:
"A"<"B" "a">"A" "computer">"compare"
特别注意:strcmp(const char *s1,const char * s2)这里面只能比较字符串,不能比较数字等其他形式的参数。
一例实现代码:
#include <string.h>
#include <memcopy.h>
#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)
c的实现方式:
int mystrcmp(const char*s1,const char*s2){
while(*s1!=0&&*s2!=0&&*s1==*s2){
s1++;
s2++;
}
return *s1-*s2;
}
2函数源码
int strcmp(const char *str1, const char *str2){ while (*str1==*str2) { if(*str1=='\0') return 0; str1++; str2++; } return *str1-*str2;}
应用举例举例1
(在VC6.0中运行通过)
#include<stdio.h>
#include<string.h>
void main()
{
char string[20];
char str[3][20];
int i;
for(i=0;i<3;i++)
gets(str[i]);
if(strcmp(str[0],str[1])>0)
strcpy(string,str[0]);
else
strcpy(string,str[1]);
if(strcmp(str[2],string)>0)
strcpy(string,str[2]);
printf("\nThe largest string is %s\n",string);
}
说明
intstrcmp( string$str1 , string$str2 )
注意该比较区分大小写。
参数
str1第一个字符串。
str2第二个字符串。
返回值
如果 str1小于 str2,返回负数;如果 str1大于 str2,返回正数;二者相等则返回 0。(相等时返回0)
原型:extern int strcmp(const char *s1,const char * s2);
所在头文件:string.h
功能:比较字符串s1和s2。
一般形式:strcmp(字符串1,字符串2)
说明:
当s1<s2时,返回为负数 注意不是-1
当s1==s2时,返回值= 0
当s1>s2时,返回正数 注意不是1
注:c++ 中
当s1<s2时,返回为负数 注意不是-1
当s1==s2时,返回值等于0
当s1>s2时,返回正数 注意不是1
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:
"A"<"B" "a">"A" "computer">"compare"
特别注意:strcmp(const char *s1,const char * s2)这里面只能比较字符串,不能比较数字等其他形式的参数。
一例实现代码:
#include <string.h>
#include <memcopy.h>
#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)
c的实现方式:
int mystrcmp(const char*s1,const char*s2){
while(*s1!=0&&*s2!=0&&*s1==*s2){
s1++;
s2++;
}
return *s1-*s2;
}
2函数源码
int strcmp(const char *str1, const char *str2){ while (*str1==*str2) { if(*str1=='\0') return 0; str1++; str2++; } return *str1-*str2;}
应用举例举例1
(在VC6.0中运行通过)
#include<stdio.h>
#include<string.h>
void main()
{
char string[20];
char str[3][20];
int i;
for(i=0;i<3;i++)
gets(str[i]);
if(strcmp(str[0],str[1])>0)
strcpy(string,str[0]);
else
strcpy(string,str[1]);
if(strcmp(str[2],string)>0)
strcpy(string,str[2]);
printf("\nThe largest string is %s\n",string);
}
说明
intstrcmp( string$str1 , string$str2 )
注意该比较区分大小写。
参数
str1第一个字符串。
str2第二个字符串。
返回值
如果 str1小于 str2,返回负数;如果 str1大于 str2,返回正数;二者相等则返回 0。(相等时返回0)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询