strcmp和strncmp,C语言怎么比较两个字符串相等
strcmp和strncmp,C语言怎么比较两个字符串相等详细介绍
本文目录一览: 字符串比较函数strcmp()和strncmp()
int strcmp(const char *s1,const char * s2); 比较s1,s2二个字符串的大小. int strncmp(char *str1, char *str2, int maxlen); 比较s1,s2二个字符串,前maxlen字符的大小。当maxlen为s1,s2中字符串最长长度时,相当于strcmp.
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
本文实例讲述了PHP中strcmp()和strcasecmp()函数字符串比较用法。分享给大家供大家参考,具体如下:
一、PHP中strcmp()函数用于比较两个字符串(区分大小写),其定义如下:
strcmp(string1,string2)
参数说明:
string1
必需。规定要比较的第一个字符串。
string2
必需。规定要比较的第二个字符串。
PS:strcmp()函数与
strncmp()
函数类似,不同的是,strncmp()可以指定每个字符串用于比较的字符数。
二、PHP中strcasecmp()函数比较两个字符串(不区分大小写),其定义如下:
strcasecmp(string1,string2)
参数说明:
string1 必需。规定要比较的第一个字符串。
string2 必需。规定要比较的第二个字符串。
PS:strcasecmp()函数与
strncasecmp()
函数类似,不同的是,strncasecmp()可以指定每个字符串用于比较的字符数。
示例代码:
<!--?php$str1="脚本之家";
$str2="脚本之家";
$str3="www.jb51.net";
$str4="WWW.JB51.NET";
echo
strcmp($str1,$str2);//两个字符串相等
echo
"
";
echo
strcmp($str3,$str4);//注意该函数区分大小写
echo
"
";
echo
strcasecmp($str3,$str4);//该函数不区分大小写
?>
运行结果如下:
0
1
0
补充:关于返回值问题
针对参数string1与string2的比较:
如果两个字符串相等,则返回值为
0
如果
string1
小于
string2,则返回值小于0
如果
string1
大于
string2,则返回值大于0
希望本文所述对大家PHP程序设计有所帮助。
字符串比较函数strcmp()和strncmp()
strcmp()比较以null终止前字符串s1和以null终止的字符串s2的内容,返回一个int类型值,s1大于s2时小于0,s2等于s2为0,s1大于s2时大于0
strncmp()和strcmp相似,只是至多比较以null终止的字符串s1的前n个字符与以null终止的字符串s2的前n个字符。
比较一下:
函数原型:extern int strcmp(const char *s1,const char * s2);
int strncmp(char *str1, char *str2, int maxlen);
可以看出strncmp多一个参数maxlen,区别就在这里,这个表示的是比较字符串的前maxlen长度的字符
两者返回值也不同:
strcmp,当s1
<s2时,返回负数
当s1==s2时,返回0
当s1>s2时,返回正数
strncmp:如果前maxlen字节完全相等,返回值就=0;
如果在前maxlen字节比较过程中,出现str1[n]与str2[n]不等,则返回(str1[n]-str2[n])。
</s2时,返回负数
MATLAB里面strcmp和strncmp的作用
strcmp()接受两个指针参数,意思是把第二个指针所指的字符串,复制到第一个指针所指的数组中,
strncpy ()接受三个参数,前两个是指针参数,数字是复制第二个指针所指的字符串的个数,3就是把第二个复制三个字符到第一个中。
strcmp(S1,S2):寻找S1和S2是否完全匹配,S1和S2没有顺序的区分。
例: s= 'wooden';
strcmp(s,'wood') returns 0
strcmp(s,'wooden') returns 1
strcmp('wooden',s) returns 1
strcnmp(S1,S2,n):寻找S1和S2的前n个字符是否完全匹配,S1和S2没有顺序的区分。
例: s= 'wooden';
strncmp(s,'wood',4) returns 1
strncmp(s,'wood',5) returns 0
strncmp(s,'wooden',4) returns 1
strncmp('wooden',s,4) returns 1
strcmpi(S1,S2)与strncmpi(S1,S2,n)与上面分别对应的strcmp(S1,S2)与strncmp(S1,S2,n)完全相同,唯一的区分是匹配时不区分大小写。
字符串处理函数
(1)字符串长度函数:
int strlen( char *p )
{
int i=0;
while( p[i]!='\0' ){
i++;
}
return i;
}
(2)字符串复制函数:
//将p2所指的内容全部赋给p1
void strcpy( char *p1 , char *p2 )
{
int i=0;
while( p2[i]!='\0'){
p1[i]=p2[i];
i++;
}
p1[i]='\0';
}
(3)字符串比较函数:
int strcmp( char *p1 , char *p2 )
{
int i=0;
while( p1[i]!='\0' && p2[i]!='\0'){
if( p1[i]-p2[i] )
return p1[i]-p2[i];
i++;
}
return strlen(p1)-strlen(p2);
}
(4)最后,提供一个主函数供你测试一下,并附测试用例及预期输出结果 :]
int main()
{
char *p1 , *p2;
p1=new char[1000];
p2=new char[1000];
while( cin>>p1>>p2 ){
cout<
<strlen(p1)<<endl;
cout<
<strlen(p2)<<endl;
cout<
<strcmp(p1,p2)<<endl;
strcpy(p1,p2);
cout<<"after copying p1 becomes "
<
<p1<<endl;
}
return 0;
}
/*
helloWorld
myGirl
10
6
-5
after copying p1 becomes myGirl
abcdef
bcdefg
6
6
-1
after copying p1 becomes bcdefg
abcdefg
abcdefg
7
7
0
after copying p1 becomes abcdefg
abcdefg
abcdefghijkg
7
12
-5
after copying p1 becomes abcdefghijkg
abcdf
abcdd
5
5
2
after copying p1 becomes abcdd
abcdefghij
abcdefg
10
7
3
after copying p1 becomes abcdefg
*/
s代表的是你输入的字符串,N1代表的是从第几个字符开始取,n2是取多少个字符,例如:substr(myname,2,2),结果就是yn
1、字符串长度函数strlen(参数)
解释:求出字符串中有效字符的个数,参数可以是指针、字符串、数组
例如:char aa[]="abc";
char *p=aa;
strlen(aa)=strlen(p)=strlen("abc")
2、字符串比较函数strcmp()和strncmp()
解释:将两个字符串逐个进行比较,当遇到两个字符不同时便停止比较,用前面字符串中的字符与后面字符串中对应的字符进行相减,得到一个大于或小于0的字符,若返回值
为0,则字符串相等。strncmp()只比交前n个字符
格式:strcmp(char *p1,char *p2) strncmp(char *p1,char
*p2,n)
p1 p2可以是指针 也可以是字符数组
3、检索字符串函数index()或rindex
解释:该函数的功能是检索在指定的字符串中第一次出现指定字符的位置,该函数返回一个指针,该指针给出指定字符在字符串中的位置,若该字符串中没有该字符则返回NULL 格式:char*index(char *p,char
c) char *rindex(char *p,char c) index 从作向右
rindex 从右向左
4、字符串连接函数strcat()和 strncat()
解释:连接两个字符串,将第二个字符串连接到第一个字符串的后面,组成一个新的字符串,并返回一个指针,该指针指向新字符串的首元素
格式:char *strcat(char s1[],char s2[]), char *strncat(char
s1[],char s2[],n)
该函数的参数可以是指针 也可以是数组
5、字符串复制函数strcpy()和strncpy()
解释:将后面的字符串复制到前面的字符串中,后面字符串保持不变,前面的字符串被覆盖掉,并返回一个指针
格式:char * strcpy(char s1[],char s2[])
char*strncpy(char s1[],char s2[],n);
参数可以是字符数组或者指针
</p1<<endl;
</strcmp(p1,p2)<<endl;
</strlen(p2)<<endl;
</strlen(p1)<<endl;
strcmp(a,b),比较时是否要求两个字符串的长度相等??
strcmp 与 strncmp 两个都是比较函数,但是都不需要规定两个字符串的长度。
strcmp 函数的使用时取字符串a , b然后依次从第一个字符开始比较,直到出现不同,然后在判断是否其大小。你可以看下下面的程序:
#include
#include
#define MAX 100int main(){ char str1[MAX]; char str2[MAX] = "123456789"; printf("please enter a string:"); scanf("%99[^\n]", str1); printf("str1 : %s\n", str1); printf("str2 : %s\n", str2); printf("%d\n", strcmp(str1, str2)); //相同返回0,如果str1比str2大则返回1,反之返回-1,比较是按照ASCII来的 return 0;}
strncmp( )函数返回值是什么
strncmp()函数返回值:如果返回值<0,则表示str1小于str2。如果返回值>0,则表示str2小于str1。如果返回值=0,则表示str1等于str2。
字符串大小的比较是以ASCII码表上的顺序来决定,此顺序亦为字符的值。其函数声明为intstrncmp(constchar*str1,constchar*str2,size_tn)。
功能是把str1和str2进行比较,最多比较前n个字节,若str1与str2的前n个字符相同,则返回0。
扩展资料:
strncmp函数的功能比较:
(1)strncmp函数
用来比较s1和s2字符串的前n个字符。如果两个字符串相等的话,strncmp将返回0。如果s1是s2的一个子串的话,s1小于s2。
(2)strcmp函数
同样用于比较两个字符串,设这两个字符串为str1,str2。若str1==str2,则返回零;若str1>str2,则返回正数;若str1
<str2,则返回负数。
参考资料来源:百度百科—strncm
</str2,则返回负数。
C++中如何判断两个字符串是否相等?
strcmp的头文件为#include
如果用到string类,则头文件为#include
#include
老版本是
strcmp函数,string comparison。接受两个参数。用前者去减后者。如果为0就是相等。如果负数,前者在ASCLL表的代码比后者小。在后者前面。
strcmp("ab","ad");
有些系统为-1有些系统为-2.
strncmp接受3个参数。
strncmp("abc","abcdefg",3);
判断前三个。第三个参数指定比较的位数。
而且还可以利用判断和指针判断除某些字符外的指定位置。
#include
using namespace std;
int main()
{
char a[16],b[16];
cout<<"请输入您的密码"<
<endl;
do
{
cin>>a;
cout<<"请再次输入您的密码"<
<endl;
cin>>b;
if (strcmp(a,b)==0)
{
cout<<"恭喜您!登陆成功"<
<endl;
break;
}
else
cout<<"您两次输入的密码不一致,请重新输入"<
<endl;
}while(a!=b);
return 0;
}
string(a)==string(b) 或
#include
strcmp(a,b) == 0表示相等
C语言中比较两个字符串是否相等的方法是使用strcmp函数。
它的形式是:strcmp(str1, str2) == 0(成立则两个字符串相等),它需要在编译器开头加上#include
头文件。它的作用是接受两个参数,并用前者去减后者。如果为0就是相等。如果负数,前者在ASCLL表的代码比后者小。举例:
#include
#include
int main()
{
char str1[] = "123456";
char str2[] = "123456";
if (strcmp(str1, str2) == 0) //这一步开始比较两个字符串是否相等。
printf("这两个字符串相等.");
else printf("这两个字符串不相等");
return 0;
}
输出结果为:
扩展资料:一、函数的实现原理:向strcmp()函数中传入两个字符串(记为str1,str2).传入之后,通过把str1的各字母的ASCII码值和str2的各字母的ASCII码值进行比较。若str1>str2则返回正数,若str1=str2则返回0,否则,则返回负数。
二、函数使用规则:
当s1
s2时,返回正数。即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:
"A"<"B" "a">"A" "computer">"compare"
特别注意:strcmp(const char *s1,const char * s2)这里面只能比较字符串,即可用于比较两个字符串常量,或比较数组和字符串常量,不能比较数字等其他形式的参数。ANSI标准规定,返回值为正数,负数,0 。而确切数值是依赖不同的C实现的。
参考资料:strcmp函数-百度百科
</endl;
</endl;
</endl;
</endl;
C++中如何比较两个字符变量的大小
这两个看似一样的东西,其实是指向不同的地址,所以他们比较的时候在比较的是指针所指向的地址,当然会不同。
而且你写错了:
const char* x;
x = "3.1415926";
string y = "3.1415926";
if(x.c_str()==y)
return 1;
这个x是const char*类型,怎么可能能.c_str()呢。。。应该是if(x==y.c_str())吧。
正确的比较方法:
const char* x;
x = "3.1415926";
string y = "3.1415926";
if(*x==*y.c_str())
return 1;
使用*把他们都从指针变回非指针类型即可。
字符的大小,可以直接用< > ==等逻辑运算符。
比如 char a = '1';
char b = '2';
if(b>a)cout<<"b>a"<
<endl;
else cout<<"a>=b"<
<endl;
string类直接用比较运算符 <,>,=
C++提供的字符串处理函数在string.h的头文件中声明。
字符串比较函数strcmp( )
函数原型:int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, int n);
功能:以字典顺序方式比较两个字符串是否相等。如果两个串相等,函数返回值为0;如果s1串大于s2串,返回值大于0;如果s1串小于s2串,返回值小于0。函数strcmp用于对两个串的完全比较;函数strncmp用于比较两个串的前n个字符。
【例5- 6】字符串比较。
#include
#include
#include
void main()
{
char s1[] = "Happy New Year";
char s2[] = "Happy New Year";
char s3[] = "Happy Holidays";
cout << "s1 = " << s1 << "\ns2 = "<< s2
<< "\ns3 = "<< s3 << "\n\nstrcmp(s1, s2) ="
<< setw( 2 ) << strcmp( s1, s2 )
<< "\nstrcmp(s1, s3) = "<< setw( 2 )
<< strcmp( s1, s3 ) << "\nstrcmp(s3, s1) ="
<< setw( 2 ) << strcmp( s3, s1 );
cout << "\n\nstrncmp(s1, s3, 6) = "<< setw( 2 )
<< strncmp( s1, s3, 6) << "\nstrncmp(sl, s3, 7) ="
<< setw( 2 ) << strncmp( s1, s3, 7 )
<< "\nstrncmp(s3, s1, 7) ="
<< setw( 2 ) << strncmp( s3, s1, 7 ) << endl;
}
程序运行结果如下:
s1 = Happy New Year
s2 = Happy New Year
s3 = Happy Holidays
strcmp(s1, s2) = 0
strcmp(s1, s3) = 1
strcmp(s3, s1) = -1
strncmp(s1, s3, 6) = 0
strncmp(s1, s3, 7) = 1
strncmp(s3, s1, 7) = -1
自定义版字符串比较
//当str1>str2时,返回正数
//当str1==str2时,返回0
//当str1
<str2时,返回负数
int strcmp(const char *str1,const char *str2)
{
int x;
while(*str1!='\0'||*str2!='\0' )
{
if(*str1==*str2)
{
x=0;
str1++;
str2++;
continue;
}
if(*str1>*str2)
{ x=1;break ;}
if(*str1<*str2)
{ x=-1;break; }
if(*str1=='\0'&&*str2!='\0' )
{
x=-1; break;
}
if(*str1!='\0'&&*str2=='\0' )
{
x=1; break;
}
if(*str1=='\0' ||*str2=='\0' )
{
x=0;continue;
}
}
return x;
}
#include
void main()
{
char*str1="Happy New Year!";
char*str2="Happy New Year!";
char*str3="Happy Holidays!";
cout<<"str1="<
<str1<<"\nstr2="<<str2<<"\nstr3="<<str3<<endl;
cout<<"strcmp(str1,str2)="<
<strcmp(str1,str2)
<<"\nstrcmp(str1,str3)="<
<strcmp(str1,str3)
<<"\nstrcmp(str3,str1)="<
<strcmp(str3,str1)<<endl;
}
</strcmp(str3,str1)<<endl;
</strcmp(str1,str3)
</strcmp(str1,str2)
</str1<<"\nstr2="<<str2<<"\nstr3="<<str3<<endl;
</str2时,返回负数
</endl;
</endl;
C语言怎么比较两个字符串相等
使用 strcmp strncmp 函数
例如
if (!strcmp(str1, str2))
printf("str1 equals str2\n");
比较字符可以直接使用==比较操作符,如:
char c1='a',c2='b';
if(c1==c2) printf("%c is same as %c.",c1,c2);
else printf("%c is different to %c",c1,c2);
若是字符串,则需要使用字符串函数了,strcmp
char s1[]="abc",s2[]="xyz";
if(strcmp(s1,s2)==0) printf("%s is same as %s.",s1,s2);
也可以忽略大小写来比较,使用函数stricmp 中间的i意思是ignore case sensitive
还可以指定长度比较,strncmp,如:
char s1[]="abc",s2[]="abcdefg";
if(strncmp(s1,s2,3)==0) printf("first 3 characters are same");
若不是从开头位置开始比较,如:
char s1[]="abc",s2[]="xyzabc"
if(strncmp(s1,&s2[3],3)==0) 就是比较s1和s2的第3个字符开始的内容