-
2022-04-26 10:44:06
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
写程序的时候我们经常会遇到要比较两个字符串是否相等,下面将介绍几种比较方法
一.比较两个char类型的字符串,利用strcmp()函数
写法:int strcmp(const char s1,const char*s2)
当s1 < s2时,返回为负数;
当s1 == s2时,返回值= 0;
当s1 > s2时,返回为正数。代码示例
#include<iostream> #include<string.h> using namespace std; int main() { char s1[] = "aaa", s2[] = "aaa"; cout << "s1==s2(相等为1,不等为0):" << (s1 == s2) << endl; if (!strcmp(s1, s2)) cout << "s1和s2相等" << endl; else cout << "s1和s2不相等" << endl; }
a其实是一个指向字符串的指针,用“==”比较的时候相当于比较的是地址
注:头文件#include<string.h>
strcmp(const char s1,const char s2) 这里面只能比较字符串,即可用于比较两个字符串常量,或比较数组和字符串常量,不能比较数字等其他形式的参数。
二.比较的是两个string对象,利用compare()函数
写法:s1.compare(s2)
当s1 < s2时,返回为负数;
当s1 == s2时,返回值= 0;
当s1 > s2时,返回为正数。代码示例
#include<iostream> #include<string> using namespace std; int main() { string s1 = "aaa", s2 = "aaa"; cout << "s1==s2(相等为1,不等为0):" << (s1 == s2) << endl; if (!s1.compare(s2)) cout << "s1和s2相等" << endl; else cout << "s1和s2不相等" << endl; }
注:头文件#include<string>
比较两个string对象时,也可以用“==”,相等为1,不等为0。
更多相关内容 -
python中字符串比较使用is、==和cmp()总结
2020-09-20 17:28:43在Python中比较字符串最好是使用简单逻辑操作符,今天为大家讲解一下is、==和cmp()使用总结 -
Linux Shell字符串比较
2016-08-25 13:44:21Linux Shell字符串比较 -
JS字符串比较
2021-12-22 09:53:16JS中字符串可以进行>... 非数字字符串与数字比较时,非数字字符串会转换成NaN,NaN与任何比较都返回false。 console.log('1.2.2a' > '1.2.2b'); // false console.log('1.02.1' > '1.1'); /JS中字符串可以进行>、<、==、===比较,以下进行具体说明。
1、>、<比较
- 字符串进行大于(小于)比较时,会根据第一个不同的字符的ASCII值码进行比较;
- 数字字符串与数字比较时,数字字符串会转换成数字再进行大小比较;
- 非数字字符串与数字比较时,非数字字符串会转换成NaN,NaN与任何比较都返回false。
console.log('1.2.2a' > '1.2.2b'); // false console.log('1.02.1' > '1.1'); // false console.log('1.23' < '1.2b'); // true console.log('1.23' < 1.24); // true console.log(1.23 < '1.24a'); // false console.log(1.23 > '1.24a'); // false
2、相等(==)
相等比较时,不要求类型完全一致。非一致的,会尝试转换成一致类型再比较数值大小或者引用地址大小。
- 字符串比较,依次比较每个字符是否一样;
- 数字字符串与数字比较时,数字字符串会转换成数字再进行相等比较;
- 非数字字符串与数字比较时,非数字字符串会转换成NaN,NaN与任何比较都返回false;
- 字符串与字符对象比较时,字符对象会转换成字符串再进行相等比较;
- 字符对象比较时,比较字符对象的地址大小。
console.log('abc' == 'abc'); // true console.log('abc' == new String('abc')); // true console.log('123' == 123); // true console.log('123a' == 123); // false console.log(new String('abc') == new String('abc')); // false
3、严格相等(===)
严格相等是类型一致的相等。
console.log('abc' === 'abc'); // true console.log('abc' === new String('abc')); // false console.log(new String('abc') === new String('abc')); // false
4、比较中的几种特殊情况
主要是null、undefined、NaN的比较。
- null与undefined相等,它们自身都相等;
- null与undefined严格不相等,它们与自身严格相等;
- NaN与任何比较都不相等。
console.log(null == undefined); // true console.log(null === undefined); // false console.log(null === null); // true console.log(undefined === undefined); // true console.log(NaN == undefined); // false console.log(NaN == null); // false console.log(NaN == NaN); // false console.log(NaN === NaN); // false
-
c语言怎么进行字符串比较
2021-05-26 01:18:23比较方法:1、bcmp(),比较字符串的前n个字节是否相等;2、strcmp(),区分大小写的比较字符串;3、stricmp(),不区分大小写的比较字符串;4、strncmp()或strnicmp(),区分大小写的比较字符串的前n个字符。本教程操作...比较方法:1、bcmp(),比较字符串的前n个字节是否相等;2、strcmp(),区分大小写的比较字符串;3、stricmp(),不区分大小写的比较字符串;4、strncmp()或strnicmp(),区分大小写的比较字符串的前n个字符。
本教程操作环境:windows7系统、c99版本、Dell G3电脑。
使用bcmp()–比较内存(字符串)的前n个字节是否相等
原型为:
int bcmp(const void *s1, const void * s2, int n);
【参数】s1, s2 为需要比较的两块内存(或两个字符串),n 为要比较的长度。
【返回值】如果 s1, s2 的前 n 个字节相等或者 n 等于 0,则返回 0,否则返回非 0 值。
bcmp() 函数不检查NULL。
实际上,bcmp() 和 memcmp() 功能相同,用来比较内存块的前 n 个字节是否相等,但是 s1, s2 两个参数为指针,又很奇怪的位于 string.h 文件中,也可以用来比较字符串。
示例:
#include
#include
int main ()
{
char *s1 = "Golden Global View";
char *s2 = "Golden Global View";
if( !bcmp(s1, s2, 7) )
printf("s1 equal to s2 in first 7 bytes");
else
printf("s1 not equal to s2 in first 7 bytes");
return 0;
}
使用strcmp()–比较字符串(区分大小写)
其原型为:
int strcmp(const char *s1, const char *s2);
【参数】s1, s2 为需要比较的两个字符串。
字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strcmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,若差值不为0 则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。
【返回值】若参数s1 和s2 字符串相同则返回0。s1 若大于s2 则返回大于0 的值。s1 若小于s2 则返回小于0 的值。
注意:strcmp() 以二进制的方式进行比较,不会考虑多字节或宽字节字符。
示例:
#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
使用stricmp()–比较字符串(不区分大小写)
原型为:
int strcmp(char *s1, char *s2);
【参数说明】s1, s2 为需要比较的两个字符串。
字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。stricmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,若差值不为0 则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。
【返回值】若参数s1 和s2 字符串相同则返回0。s1 若大于s2 则返回大于0 的值。s1 若小于s2 则返回小于0 的值。
注意:stricmp()是Windows下特有的,linux下具有相同功能的函数是strcasecmp(),包含在头文件strings.h下。
另外一个不区分大小写比较字符串的函数是strcmpi(),strcmpi()是stricmp()的宏定义,实际未提供此函数。
示例:比较两个字符串的大小。
#include
#include
int main(void)
{
/*定义两个字符串*/
char* s1 = "http://see.xidian.edu.cn/cpp/u/biaozhunku/";
char* s2 = "http://see.xidian.edu.cn/cpp/shujujiegou/";
/*比较字符串(不分大小写)*/
int result = 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();/*等待用户输入个字符,然后退出*/
return 0;
}
输出:
Result: s1 > s2
使用strncmp()–比较字符串的前n个字符(区分大小写)
其原型为:
int strncmp ( const char * str1, const char * str2, size_t n );
【参数】str1, str2 为需要比较的两个字符串,n为要比较的字符的数目。
字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strncmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,直到字符结束标志'\0',若差值不为0,则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。
注意:要比较的字符包括字符串结束标志'\0',而且一旦遇到'\0'就结束比较,无论n是多少,不再继续比较后边的字符。
【返回值】若str1与str2的前n个字符相同,则返回0;若s1大于s2,则返回大于0的值;若s1 若小于s2,则返回小于0的值。
注意:如果两个字符不同,GCC返回该字符对应的ASCII码的差值,VC返回-1或1。但是让人为难的是,strnicmp()、strcmp()、stricmp()在GCC和VC下都返回-1或1,而不是ASCII的差值。
实例:对2组字符串进行比较。
#include
#include
int main(void){
char* s1 = "http://see.xidian.edu.cn/cpp/u/xitong/";
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)); // 是否区分大小写
printf("s3-s4=%d\n", strncmp(s3, s4, 100)); // s3的长度小于s4
printf("s5-s6=%d\n", strncmp(s5, s6, 100)); // s5的长度大于s6
return 0;
}
VC6.0下运行结果:
s1-s2=1
s3-s4=-1
s5-s6=1
GCC下运行结果:
s1-s2=32
s3-s4=-120
s5-s6=52
使用strnicmp()–比较字符串的前n个字符(区分大小写)
原型为:
int strnicmp ( const char * str1, const char * str2, size_t n );
【参数】str1, str2 为需要比较的两个字符串,n为要比较的字符的数目。
【返回值】若str1与str2的前n个字符相同,则返回0;若s1大于s2,则返回大于0的值;若s1 若小于s2,则返回小于0的值。
与strncmp()不同的是,如果两个字符不同,GCC和VC都返回-1或1,而不是返回对应的ASCII的差值。
有关strnicmp()的其他说明请查看strncmp(),这里仅举例演示,不再赘述。
另外一个不区分大小写比较字符串前n个字符的函数是strncmpi(),strncmpi()是strnicmp()的宏定义,实际未提供此函数。
示例:对6组字符串进行比较。
#include
#include
int main(void){
char* s1 = "http://see.xidian.edu.cn/cpp/u/xitong/";
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", strnicmp(s1, s2, 20)); // 是否区分大小写
printf("s3-s4=%d\n", strnicmp(s3, s4, 100)); // s3的长度小于s4
printf("s5-s6=%d\n", strnicmp(s5, s6, 100)); // s5的长度大于s6
return 0;
}
VC6.0下运行结果:
s1-s2=0
s3-s4=-1
s5-s6=1
GCC下运行结果:
s1-s2=0
s3-s4=-1
s5-s6=1
相关推荐:《C语言视频教程》
-
C# 字符串比较
2021-05-18 16:29:59字符串比较前言
此篇文章转载的是书籍
《从零开始学C#》
的内容,稍加改变并非原创
项目名称为Test
,类名为Program
一、函数方法
函数方法 返回值 string.Compare( 字符串1
,字符串2
)相等时返回0,前者较大时返回1,后者较大时返回-1 string.CompareOrdinal( 字符串1
,字符串2
)相等时返回0,否则返回前者减去后者的ASCII码值 字符串1
.CompareTo(字符串2
)相等时返回0,前者较大时返回1,后者较大时返回-1 字符串1
.Equals(字符串2
)相等时返回True,否则返回False 二、Compare方法
string.Compare(
str1
,str2
)参数:
str1
和str2
为两个要比较的字符串返回值:
如果两者相等返回0
,
如果str1 > str2
返回1
,
如果str1 < str2
返回-1
注意:
比较字符串并不是比较字符串的长度,而是从首字符开始逐个比较字符的大小,
如果已经分出大小则结束比较,如果相等则继续比较下一个字符,直到分出大小或到达字符串尾。using System; namespace Test { class Program { static void Main(string[] args) { string str1, str2; /* 样例1(str1 < str2):因为str1的第一个字符为A比B小,所以结果会直接返回-1,不对之后的值进行比较 */ str1 = "ABC"; str2 = "B"; Console.WriteLine("样例1:{0}",string.Compare(str1,str2)); /* 样例2(str1 > str2):因为str2仅有一个字符A,在比较完第一个字符后str1还有多余的字符,结果会返回1 */ str1 = "ABC"; str2 = "A"; Console.WriteLine("样例2:{0}", string.Compare(str1, str2)); /* 样例3(str1 < str2):在比较时不是比较ASCII码,比较时默认小写字母小于大写字母 */ str1 = "a"; str2 = "A"; Console.WriteLine("样例3:{0}", string.Compare(str1, str2)); } } }
三、CompareTo方法
str1
.CompareTo(str2
)参数:
str1
和str2
为两个要比较的字符串返回值:
如果两者相等返回0
,
如果str1 > str2
返回1
,
如果str1 < str2
返回-1
注意:
CompareTo
方法和Compare
方法类似,CompareTo()
方法以实例对象本身和目标字符串进行比较。
比较字符串并不是比较字符串的长度,而是从首字符开始逐个比较字符的大小,
如果已经分出大小则结束比较,如果相等则继续比较下一个字符,直到分出大小或到达字符串尾。using System; namespace Test { class Program { static void Main(string[] args) { string str1, str2; /* 样例1(str1 < str2):因为str1的第一个字符为A比B小,所以结果会直接返回-1,不对之后的值进行比较 */ str1 = "ABC"; str2 = "B"; Console.WriteLine("样例1:{0}",str1.CompareTo(str2)); /* 样例2(str1 > str2):因为str2仅有一个字符A,在比较完第一个字符后str1还有多余的字符,结果会返回1 */ str1 = "ABC"; str2 = "A"; Console.WriteLine("样例2:{0}", str1.CompareTo(str2)); /* 样例3(str1 < str2):在比较时不是比较ASCII码,比较时默认小写字母小于大写字母 */ str1 = "a"; str2 = "A"; Console.WriteLine("样例3:{0}", str1.CompareTo(str2)); } } }
四、Equals方法
str1
.Equals(str2
)参数:
str1
和str2
为两个要比较的字符串返回值:
如果两者相等返回True
,否则返回False
using System; namespace Test { class Program { static void Main(string[] args) { string str1, str2; /* 样例1(str1 == str2):相等时直接返回True */ str1 = "ABC"; str2 = "ABC"; Console.WriteLine("样例1:{0}",str1.Equals(str2)); /* 样例2(str1 != str2):不相等时返回False */ str1 = "ABC"; str2 = "ACB"; Console.WriteLine("样例2:{0}", str1.Equals(str2)); } } }
五、CompareOrdinal方法
string.CompareOrdinal(
str1
,str2
)参数:
str1
和str2
为两个要比较的字符串返回值:
如果两者相等返回0
,否则返回str1
减去str2
两者ASCII
码的差值using System; namespace Test { class Program { static void Main(string[] args) { string str1, str2; /* 样例1(str1 == str2):相等时直接返回0 */ str1 = "ABC"; str2 = "ABC"; Console.WriteLine("样例1:{0}",string.CompareOrdinal(str1,str2)); /* 样例2(str1 > str2):B的ASCII码为66,A的ASCII码为65, B减去A的ASCII码值为1 */ str1 = "B"; str2 = "A"; Console.WriteLine("样例2:{0}", string.CompareOrdinal(str1,str2)); /* 样例3(str1 > str2):a的ASCII码为97,A的ASCII码为65, a减去A的ASCII码值为32 */ str1 = "a"; str2 = "A"; Console.WriteLine("样例3:{0}", string.CompareOrdinal(str1, str2)); /* 样例4(str1 > str2):如果含有多个字符且两者不相等时,返回的是两个字符串的首字符ASCII码的差值,即32 */ str1 = "abcd"; str2 = "ABCD"; Console.WriteLine("样例4:{0}", string.CompareOrdinal(str1, str2)); } } }
-
shell 字符串比较
2021-09-07 09:11:53一、一个字符串比较脚本,str为空 #!/bin/bash if [ $str = denglin ];then echo "OK" else echo "not OK" fi 二、运行该脚本 ./test.sh: line 3: [: =: unary operator expected not OK 三、错误原因 变量... -
Shell条件测试之字符串比较
2021-12-09 18:17:081、字符串比较(字符串运算符): str1 = str2 : 相等比较 str1 != str2 : 不等比较 str1 < str2 : str1小于str2为true,比较字母在字母表顺序,字母越靠后就越大,反之越小 str1 > str2 : str1大于str2为... -
python字符串比较
2021-01-27 15:44:22字符串比较规则: 从第一个字符开始,位置一一对应比较编码大小,当一个字符串全部字符和另一个字符串的前部分字符相同时,长度长的字符串为大。 例题解析: 以下选项中值为 False 的是 ( D ) A.‘abcd’<‘ad... -
c++ 字符串比较
2022-04-17 21:03:50c++ 字符串比较 -
MATLAB字符串比较总结
2020-12-24 10:40:30m=''% 获取字符串长度length(a)% 连接两个字符串,每个字符串最右边的空格被裁切d=strcat(a,c)length(d)% 连接多行字符串,每行长度可不等,自动把非最长字符串最右边补空格% 使与最长字符串相等,会忽略空字符串e=... -
python中的字符串比较
2021-11-12 21:10:13字符串比较的规则是由左边开始最前面的字符对应ascll码表中的大小决定的,与长度无关,比如下面这个比较: 进阶,如何根据字符串数组长度排序 我们可以使用sort方法和sorted函数根据长度进行排序,方法是将键作为... -
字符串比较(java)
2022-01-18 21:20:41字符串对比 问题描述 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一: 1:两个字符串长度不等。比如 Beijing 和 Hebei 2:两个字符串不仅长度相等,而且相应... -
Java字符串比较的几种方法
2021-03-01 17:31:39在 Java 中,字符串比较是常见的操作,包括比较相等、比较大小、比较前缀和后缀串等··;常用方法有 3 个:equals() 方法、equalsIgnoreCase() 方法、 compareTo() 方法,接下来详细介绍这 3 个方法的使用: ... -
时间字符串比较大小
2020-04-15 21:29:52比较简单的方法是可以使用String类中的compareTo()方法比较 //格式一 String date1 = "2019-01-21"; String date2 = "2019-02-12"; //格式二 String date1 = "20190121"; String date2 = "20190212... -
Java字符串比较(3种方法)
2021-05-06 16:43:06equals() 方法将逐个地比较两个字符串的每个字符是否相同。如果两个字符串具有相同的字符和长度,它返回 true,否则返回 false。对于字符的大小写,也在检查的范围之内。equals() 方法的语法格式如下: str1.equals... -
MySQL 字符串和数值比较、字符串与字符串比较
2020-05-29 10:59:50一、字符串与数字比较 MySQL字符串和数字比较的坑:比较时会把字符串类型转成整数类型,从首字母开始,遇到非数字类型后终止。 原文: Comparison operations result in a value of1(TRUE),0(FALSE), orNULL. ... -
C语言中字符串比较
2020-11-02 13:18:19在单片机串口实现字符串命令解析这篇文章中分析了在串口通信中如何去解析字符串命令,这篇文章就来讨论下字符串比较的方法都有哪些? 说起比较运算,肯定第一时间想到了C语言中关于比较的相关运算符 “>、<... -
JS中的字符串比较
2020-09-29 18:20:122.纯数字和数字型字符串比较 (30 > '20'); //true 数字型字符串会转成纯数字再与前面的纯数字比较,即 20 与 30 相比谁大? 3.纯数字和非数字字符串比较 ('a' > 96); //false 这种情况下,js 会将字符串转成... -
Shell字符串比较(等于、不等于、大于、小于、起始字符、结尾字符)
2021-08-02 11:02:50#测试各种字符串比较操作。 #shell中对变量的值添加单引号,双引号和不添加的区别:对类型来说是无关的,即不是添加了引号就变成了字符串类型, #单引号不对相关量进行替换,如不对$符号解释成变量引用,从而用对应... -
MySQL中字符串比较大小(日期字符串比较问题)
2022-01-05 16:54:06数据库中在对于数字与非数字混合的字符串,在进行大小比较的时候,如果两字符串长度相等,那么两字符串就会比较相同位置的字符,比较时若字符是数字,则直接比较,若字符是非数字那么会转换为ascii码进行比较,若在... -
Python字符串比较
2020-09-15 23:43:13Python字符串比较 (Python String Comparison) 方法1:比较使用is运算符 (Method 1: Comparing Using is Operator) is and is not operator is used to compare two strings as below: is和not运算符用于比较两个... -
两个字符串比较
2018-03-02 14:36:00两个字符串比较大小: 一、可以用compareTo()方法,另外还有compareToIgnoreCase(String) 忽略大小写及 compareTo(object string)这些 方法返回值是int,以compareTo()方法为例: 1 .如果字符串相等返回值为0... -
字符串比较大小
2022-03-21 19:10:221.如果 字符串1的第n位的ASCII码值 等于 字符串2的第n位的ASCII码值 则 继续比较下一位 2.如果 字符串1的第n位的ASCII码值 大于 字符串2的第n位的ASCII码值 则 输出结果:1,表示字符串1 > 字符串2; 3.如果 字符... -
java中字符串的比较
2021-03-05 23:59:59java中字符串的比较注意事项:1. ==: 比较的是双方的地址,而不会比较内容;2. compareTo: 比较的是双方的内容,而不会比较地址;3. equals: 进行的是字符串的对象的比较,因为equals的原形如下:boolean equals... -
字符串对比工具v2.0.exe
2019-06-08 18:07:04字符串对比工具,以前某天,到朋友家借Wi-Fi用,16位密码输入多次就是连不上,显示密钥有问题,和他家电脑上保存的密码比对了是一致的呀?无奈,使用二维码传送文本工具扫码把对方密码复制过来输入,成功连接!把两...