C语言字符串比较函数?

strcmp()函数:比较(区分大小写)

strcmp() 用来比较字符串(区分大小写),其原型为:

【参数】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() 以二进制的方式进行比较,不会考虑多字节或宽字节字符;如果考虑到本地化的需求,请使用 strcoll() 函数。

【实例】对 4 组字符串进行比较。

函数说明:strcasecmp()用来比较参数s1 和s2 字符串,比较时会自动忽略大小写的差异。

返回值:若参数s1 和s2 字符串相同则返回0。s1 长度大于s2 长度则返回大于0 的值,s1 长度若小于s2 长度则返回小于0 的值。

}

函数功能: 分解s1字符串为用特定分隔符分隔的多个字符串(通常用于将英文句分解为单词) 函数返回: 字符串s1中首次出现s2中的字符前的子字符串指针 参数说明: s2通常设置为s1中的分隔字符 规定进行子调用时(即分割s1的第2、三及后续子串)第一参数必须是NULL 在每一次匹配成功后,将s1中分割出的子串位置替换为NULL(摘下链中第一个环),所以s1被破坏了 函数会记忆指针位置以供下一次调用
 
 

 函数功能: 字符串拷贝,目的空间由该函数分配 
 函数返回: 指向拷贝后的字符串指针 
 参数说明: src-待拷贝的源字符串 
 

 函数功能: 把str2指向的字符串拷贝到str1中去 
 函数返回: 返回str1,即指向str1的指针 
 

 函数功能: 将字符串src中的count个字符拷贝到字符串dest中去 
 函数返回: 指向dest的指针 
 参数说明: dest-目的字符串,src-源字符串,count-拷贝的字符个数 
 

 

 函数功能: 将字符串src中前maxlen个字符链接到dest中 
 

 

 函数功能: 对str1和str2中的前count个字符按字典顺序比较 
 

 函数功能: 获得s1中第一个“同时也出如今s2中”字符的位置指针 
 

 函数功能: 统计s1中从头开始直到第一个“来自s2中的字符”出现的长度 
 

 函数功能: 统计s1中从头开始直到第一个“不来自s2中的字符”出现的长度 
 

 函数功能: 找出str指向的字符串中第一次出现字符ch的位置 
 函数返回: 返回指向该位置的指针,如找不到,则返回空指针 
 参数说明: str-待搜索的字符串,ch-查找的字符 
 

 函数功能: 获得字符串s中最后一个含有c字符的位置指针 
 

 函数功能: 找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符) 
 函数返回: 返回该位置的指针,如找不到,返回空指针 
 
 
 

 函数功能: 将字符串中的全部字符颠倒次序排列 
 函数返回: 指向s的指针 
 
 
 

 函数功能: 将字符串s中前n个字符设置为ch的值 
 函数返回: 指向s的指针 
 

 函数功能: 将字符串s中全部字符设置为ch的值 
 函数返回: 指向s的指针 
 

 函数功能: 分解s1字符串为用特定分隔符分隔的多个字符串(通常用于将英文句分解为单词) 
 函数返回: 字符串s1中首次出现s2中的字符前的子字符串指针 
 参数说明: s2通常设置为s1中的分隔字符 
 规定进行子调用时(即分割s1的第2、三及后续子串)第一参数必须是NULL 
 在每一次匹配成功后,将s1中分割出的子串位置替换为NULL(摘下链中第一个环),所以s1被破坏了 
 函数会记忆指针位置以供下一次调用 
 
 
 

 函数功能: 将字符串s中的字符变为大写 
 

 函数功能: 将字符串中的字符变为小写字符 
 函数返回: 指向s的指针 
 

函数功能: 统计字符串str中字符的个数(不包括终止符'\0') 
函数返回: 返回字符串的长度. 
 

函数功能: 获得错误信息的内容信息 
函数返回: 错误提示信息字符串指针 
 

函数功能: 字符串拷贝 
函数返回: 指向dest的指针 
参数说明: src-源字符串,n-拷贝的最大长度 
 

函数功能: 字符串拷贝,到指定长度或遇到指定字符时中止拷贝 
参数说明: src-源字符串指针,c-停止拷贝检查字符,n-长度,dest-拷贝底目的字符串指针 
 

函数功能: 在字符串中第开始n个字符中寻找某个字符c的位置 
函数返回: 返回c的位置指针,返回NULL时表示未找到 
参数说明: s-要搜索的字符串,c-要寻找的字符,n-指定长度 
 

函数功能: 按字典顺序比较两个串s1和s2的前n个字节 
参数说明: s1,s2-要比较的字符串,n-比较的长度 
 
 
 

函数功能: 按字典顺序、不考虑字母大小写对字符串s1,s2前n个字符比较 
参数说明: s1,s2-要比较的字符串,n-比较的长度 
 
 
 

函数功能: 字符串拷贝 
函数返回: 指向dest的指针 
参数说明: src-源字符串,n-拷贝的最大长度 
 

函数功能: 字符串中的n个字节内容设置为c 
参数说明: s-要设置的字符串,c-设置的内容,n-长度 
 

 

 

 

 

 

 

 

 

 

 

 

 

strpbrk(p, p1) 以目标字符串的全部字符做为集合,在当前字符串查找该集合的任一元素

 

strspn(p, p1) 以目标字符串的全部字符做为集合,在当前字符串查找不属于该集合的任一元素的偏移

 

strcspn(p, p1) 以目标字符串的全部字符做为集合,在当前字符串查找属于该集合的任一元素的偏移

 
  • 具备指定长度的字符串处理函数在已处理的字符串以后填补零结尾符
 

2)字符串到数值类型的转换

 

 

strtol(p, ppend, base) 从字符串 p 中转换 long 类型整型数值,base 显式设置转换的整型进制,设置为 0 以根据特定格式判断所用进制,0x, 0X 前缀以解释为十六进制格式整型,0 前缀以解释为八进制格式整型

 

 

 

 

 

 

isupper() 检查是否为大写字母字符

 

islower() 检查是否为小写字母字符

 

 

isxdigit() 检查是否为十六进制数字表示的有效字符

 

isspace() 检查是否为空格类型字符

 

 

 

 

 

 

 

运行结果是:Computer
第二个字符串将覆盖掉第一个字符串的全部内容!
注意:在定义数组时,字符数组1的字符串长度必须大于或等于字符串2的字符串长度。不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。全部字符串处理函数都包含在头文件string.h中。前端




注意:在定义字符数组1的长度时应该考虑字符数组2的长度,由于链接后新字符串的长度为两个字符串长度之和。进行字符串链接后,字符串1的结尾符将自动被去掉,在结尾串末尾保留新字符串后面一个结尾符。 算法






注意:strlen函数的功能是计算字符串的实际长度,不包括’\0’在内。另外,strlen函数也能够直接测试字符串常量的长度,如:strlen(“Welcome”)。





若是字符c被复制, 函数返回这个字符后面紧挨一个字符位置的指针. 不然返回NULL.










char *strdup(const char *strSource);
函数运行中会本身调用malloc函数为复制strSource字符串分配存储空间, 而后再将strSource复制到分配到的空间中. 注意要及时释放这个分配的空间.
返回一个指针, 指向为复制字符串分配的空间; 若是分配空间失败, 则返回NULL值.



不能处理源串与目标串重叠的状况.函数返回strDestination值.













1、char_traits 字符特征类
1)意义:包装特定串元素的通用行为界面,以便容器实现时依据特征信息而执行特定行为
2)定义了通用类型名

其中 int_type 表示字符元素转换到特定编码时的整型表示,pos_type, off_type 分别做为字符串索引和字符串元素偏移的类型,相似容器迭中的指针,迭代类型和指针,迭代器的偏移类型。最后的 state_type 用于存储流状态,如出错,格式控制等等。
3)定义了字符 / 字符串操做的包装界面,以便通用算法的调用

4)int_type 类型应是当前字符类型的整型编码




4、字符串的区间有效性
对串的索引访问在超过字符串的有效区间时,由于串的在实现上对内置的字符缓冲区执行下标访问,因此不会致使异常,可是将获得不可预知的结果,一般是不可用的。
将其余字符串做为右值输入时,对该串取出计数大于串大小时按串大小计算。
std::basic_string::size_type 的实际类型为 size_t,在 Visual C++ 7.1 中实现为 unsigned,std::basic_string::npos 被静态设定为

在查找子字符串等操做时,函数返回 npos 的值表示非法索引。

返回 -1, 0, 1 做为小于、等于和大于的比较结果。









9、字符串的缓冲区管理
字符串具备相似 std::vector 的缓冲区管理界面。
size() 取得有效元素长度
max_size() 取得当前内存分配器能分配的有效空间
reserve() 为缓冲区预留空间
capacity() 取得缓冲区的容量
resize() 重设串的长度,能够为其指定初始化值
10、定义输入迭代器的尾端
向 istream_iterator 传递输入流对象以建立输入迭代器,输入迭代器持有输入流对象的指针,默认建立和读取流失败的状况下该指针被设置为 0。而且在实现输入迭代器间的 operator == 相等运算时,进行持有的流对象指针的相等比较,这样,默认建立的输入迭代器将被用于匹配输入流的结束。
  • 当输入流读取失败,用户执行 if, while 条件判断时,实际上先将判断值转换成 void* 类型,或者根据 operator ! 运算符的返回结果,对输入流重载 operator void* 和 operator ! 运算符,能够定义输入流在布尔表达式中的行为,使得当流读取失败的状况下,输入迭代器能够经过布尔表达式来确认,而不是显式访问 fail() 成员函数.
 


功能:将字符串str转换成一个双精度数值并返回结果。 参数str 必须以有效数字开头,可是容许以“E”或“e”除外的任意非数字字符结尾。例如:

功能:将字符串str转换成一个整数并返回结果。参数str 以数字开头,当函数从str 中读到非数字字符则结束转换并将结果返回。例如,



功能:将字符串转换成长整型数并返回结果。函数会扫描参数str字符串,跳过前面的空格字符,直到赶上数字或正负符号才开始作转换,而再遇到非数字或字符串结束时才结束转换,并将结果返回。例如,



功能:若是参数是数字或字母字符,函数返回非零值,不然返回零值。


功能:若是参数是字母字符,函数返回非零值,不然返回零值。


功能:若是参数是控制字符(0和0x1F之间的字符,或者等于0x7F)函数返回非零值,不然返回零值。


功能:若是参数是0到9之间的数字字符,函数返回非零值,不然返回零值.


功能:若是参数是除空格外的可打印字符(可见的字符),函数返回非零值,不然返回零值。


功能:若是参数是小写字母字符,函数返回非零值,不然返回零值。


功能:若是参数是可打印字符(包括空格),函数返回非零值,不然返回零值。


功能:若是参数是除字母,数字和空格外可打印字符,函数返回非零值,不然返回零值。


功能:若是参数是空格类字符(即:单空格,制表符,垂直制表符,满页符,回车符,新行符),函数返回非零值,不然返回零值。


功能:若是参数是大写字母字符,函数返回非零值,不然返回零值。


功能:若是参数是十六进制数字字符(即:A-F, a-f, 0-9),函数返回非零值,不然返回零值。


功能:函数在buffer指向的数组的count个字符的字符串里查找ch 首次出现的位置。返回一个指针,指向ch 在字符串中首次出现的位置, 若是ch没有在字符串中找到,返回NULL。例如:













功能:函数从from中复制count 个字符到to中,并返回to指针。 若是to 和 from 重叠,则函数行为不肯定。


功能: 与mencpy相同,不一样的是当to 和 from 重叠,函数正常仍能工做。


功能: 函数拷贝ch 到buffer 从头开始的count 个字符里, 并返回buffer指针。 memset() 能够应用在将一段内存初始化为某个值。例如:
这是将一个数组的因此份量设置成零的很便捷的方法。


功能:函数将字符串str2 链接到str1的末端,并返回指针str1. 例如:


功能:函数返回一个指向str 中ch 首次出现的位置,当没有在str 中找ch到返回NULL。
















功能:复制字符串from 中的字符到字符串to,包括空值结束符。返回值为指针to。


功能:函数返回str1 开头连续n个字符都不含字符串str2内字符的字符数。


功能:函数返回一个被定义的与某错误代码相关的错误信息。

功能:函数返回字符串str 的长度( 即空值结束符以前字符数目)。


功能:将字符串from 中至多count个字符链接到字符串to中,追加空值结束符。返回处理完成的字符串。


功能:比较字符串str1 和 str2中至多count个字符。返回值以下:








若是参数中任一字符串长度小于count, 那么当比较到第一个空值结束符时,就结束处理。


功能:将字符串from 中至多count个字符复制到字符串to中。若是字符串from 的长度小于count,其他部分用’\0’填补。返回处理完成的字符串。


功能:函数返回一个指针,它指向字符串str2中任意字符在字符串str1 首次出现的位置,若是不存在返回NULL。


功能:函数返回一个指针,它指向字符ch 在字符串str末次出现的位置,若是匹配失败,返回NULL。


功能:函数返回字符串str1中第一个不包含于字符串str2的字符的索引


功能:函数返回一个指针,它指向字符串str2 首次出现于字符串str1中的位置,若是没有找到,返回NULL。


功能:函数返回带符号的字符串start所表示的浮点型数。字符串end 指向所表示的浮点型数以后的部分。若是溢出发生,返回HUGE_VAL或 -HUGE_VAL。


功能:函数返回字符串str1中紧接“标记”的部分的指针, 字符串str2是做为标记的分隔符。若是分隔标记没有找到,函数返回NULL。为了将字符串转换成标记,第一次调用str1 指向做为标记的分隔符。以后因此的调用str1 都应为NULL。

以上代码的运行结果是:


功能:函数返回带符号的字符串start所表示的长整型数。参数base表明采用的进制方式。指针end 指向start所表示的整型数以后的部分。若是返回值没法用长整型表示,函数则返回LONG_MAX或LONG_MIN. 错误发生时,返回零。


功能:函数基本等同 strtol(), 不一样的是,它不只能够返回长整型数,并且能够返回无符号的长整型数。


功能:函数将字符串str2 的前num 个字符存储到字符串str1中。若是strcoll() 处理字符串str1 和旧的字符串str2, 返回值和strcmp()的处理结果同样。


功能:函数字符ch的小写形式。


功能:函数字符ch的大写形式。


一、字符数组的定义与初始化
字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。


若是花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则只将这些字符数组中前面那些元素,其他的元素自动定为空字符(即 ‘\0’ )。

在c语言中,将字符串做为字符数组来处理。(c++中不是)
在实际应用中人们关心的是有效字符串的长度而不是字符数组的长度,例如,定义一个字符数组长度为100,而实际有效字符只有40个,为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符’\0’表明。若是有一个字符串,其中第10个字符为’\0’,则此字符串的有效字符为9个。也就是说,在遇到第一个字符’\0’时,表示字符串结束,由它前面的字符组成字符串。
系统对字符串常量也自动加一个’\0’做为结束符。例如”C Program”共有9个字符,但在内存中占10个字节,最后一个字节’\0’是系统自动加上的。(经过sizeof()函数可验证)
有告终束标志’\0’后,字符数组的长度就显得不那么重要了,在程序中每每依靠检测’\0’的位置来断定字符串是否结束,而不是根据数组的长度来决定字符串长度。固然,在定义字符数组时应估计实际字符串长度,保证数组长度始终大于字符串实际长度。(在实际字符串定义中,经常并不指定数组长度,如char str[ ])
说明:’\n’表明ASCII码为0的字符,从ASCII码表中能够查到ASCII码为0的字符不是一个能够显示的字符,而是一个“空操做符”,即它什么也不干。用它来做为字符串结束标志不会产生附加的操做或增长有效字符,只起一个供辨别的标志。
对C语言处理字符串的方法由以上的了解后,再对字符数组初始化的方法补充一种方法——便可以用字符串常量来初始化字符数组:


注意:上述这种字符数组的总体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,下面的赋值方法是错误的
不是用单个字符做为初值,而是用一个字符串(注意:字符串的两端是用双引号“”而不是单引号‘’括起来的)做为初值。显然,这种方法更直观方便。(注意:数组str的长度不是10,而是11,这点请务必记住,由于字符串常量”I am happy”的最后由系统自动加上一个’\0’)
所以,上面的初始化与下面的初始化等价



前者的长度是11,后者的长度是10.
说明:字符数组并不要求它的最后一个字符为’\0’,甚至能够不包含’\0’,向下面这样写是彻底合法的。


可见,用两种不一样方法初始化字符数组后获得的数组长度是不一样的。


在C语言中,能够用两种方法表示和存放字符串:
(1)用字符数组存放一个字符串
(2)用字符指针指向一个字符串
对于第二种表示方法,有人认为str是一个字符串变量,觉得定义时把字符串常量”I love China”直接赋给该字符串变量,这是不对的。
C语言对字符串常量是按字符数组处理的,在内存中开辟了一个字符数组用来存放字符串常量,程序在定义字符串指针变量str时只是把字符串首地址(即存放字符串的字符数组的首地址)赋给str。
两种表示方式的字符串输出都用

%s表示输出一个字符串,给出字符指针变量名str(对于第一种表示方法,字符数组名便是字符数组的首地址,与第二种中的指针意义是一致的),则系统先输出它所指向的一个字符数据,而后自动使str自动加1,使之指向下一个字符…,如此,直到遇到字符串结束标识符 ” \0 “。
四、对使用字符指针变量和字符数组两种方法表示字符串的讨论
虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们两者之间是有区别的,不该混为一谈。
4.一、字符数组由若干个元素组成,每一个元素放一个字符;而字符指针变量中存放的是地址(字符串/字符数组的首地址),毫不是将字符串放到字符指针变量中(是字符串首地址)
对字符数组只能对各个元素赋值,不能用如下方法对字符数组赋值
 而对字符指针变量,采用下面方法赋值:
 
4.三、对字符指针变量赋初值(初始化):

而对于字符数组的初始化
str="I love China"; (这种不是初始化,而是赋值,而对数组这样赋值是不对的)
 
4.四、若是定义了一个字符数组,那么它有肯定的内存地址;而定义一个字符指针变量时,它并未指向某个肯定的字符数据,而且能够屡次赋值。
五、字符串处理函数
5.1


功能:函数将字符串str2 链接到str1的末端,并返回指针str1
注:链接前两个字符串的后面都有一个’ \0 ‘,链接时将字符串1后面的 ’ \0 ‘去掉,只在新串最后保留一个 ’ \0 ‘




注:一、“字符数组1”必须写成数组名形式,“字符串2”能够是字符数组名,也能够是一个字符串常量
二、复制时连同字符串后面的 ' \0 ' 一块儿复制到数组1中
 三、不能用赋值语句直接将一个字符串常量或者字符数组直接赋给一个字符数组(同普通变量数组是同样的),而只能用strcpy函数处理。
 四、能够用strcpy函数将字符串2中的前若干个字符复制到字符数组1中去。

}

我要回帖

更多关于 c语言中两个字符串比较 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信