编程技能:字符串函数08,strcmp
专栏导航
本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。
(一)WIn32 专栏导航
上一篇:编程技能:字符串函数07,strncat
回到目录
下一篇:无
(二)MFC 专栏导航
上一篇:编程技能:字符串函数07,strncat
回到目录
下一篇:无
本节前言
在前两节,我们讲解了字符串拼接函数 strcat 和 strncat 。本节,我们来讲解 strcmp,它是用来进行字符串比较的函数。
如何来比较呢?请看正文。
一. strcmp 基本介绍
想要使用 strcmp 函数,如果是想要在 C 语言里面使用,那么,你需要有【#include <string.h>】一行。如果是想要在 C++ 里面使用,你需要有【#include <cstring>】一行。
下面,是 strcmp 函数的原型声明。
int strcmp(const char * cs, const char * ct);
我在这里所列的原型声明,它只是我从 Linux 0.12 内核中提取出来的一种声明而已。在 Visual Studio 里面,它的声明形式不是这样子的。但是呢,我在这里列举出来的声明,它是可用的。
此函数的功能是,从左到右,挨个比较两个字符串的每一个字符的 ASCII 码 。
(一)如果两个字符串长度相同,且每一个对应位置的字符的 ASCII 码均相同,则两个字符串相等,返回值为 0 。例如 cs = "Happy", ct = "Happy" 。
(二)若之前比较的 0 位或多位字符的 ASCII 码均相同,到了某一位的时候, ASCII 码不同 。此时,若是左边参数 cs 所指向的字符串的该位字符的 ASCII 码大于 右边参数 ct 所指向的字符串的该位字符的 ASCII 码,则返回正数。例如 cs = "Hello", ct = "Happy" 。
(三)若之前比较的 0 位或多位字符的 ASCII 码均相同,到了某一位的时候, ASCII 码不同 。此时,若是左边参数 cs 所指向的字符串的该位字符的 ASCII 码小于 右边参数 ct 所指向的字符串的该位字符的 ASCII 码,则返回负数。例如,cs = “Happy”, ct = "Hello" 。
(四)两个字符串长度不同。假定 cs 指向的字符串的长度短于 ct 指向的字符串。假定 cs 的有效长度为 len 。假定,在比较前 len 个字符的时候,两个字符串的对应位置的字符的 ASCII 码均相等。再往下比较的时候, cs 所指向的字符串已经没有非 NUL 字符了,而 ct 所指向的字符串仍然包含有非 NUL 字符。这种情况下,返回负数。
(五)两个字符串长度不同。假定 cs 指向的字符串的长度长于 ct 指向的字符串。假定 ct 的有效长度为 len 。假定,在比较前 len 个字符的时候,两个字符串的对应位置的字符的 ASCII 码均相等。再往下比较的时候, cs 所指向的字符串仍然包含有非 NUL 字符,而 ct 所指向的字符串已经没有非 NUL 字符了。这种情况下,返回正数。
知识讲解的部分就结束了,接下来,我们分别来给出 C 语言代码示例和 C++ 代码示例。
二. strcmp 的 C 语言代码示例
代码如下。
#include <stdio.h>
#include <string.h>int main(void)
{int res_a, res_b, res_c, res_d, res_e;char strA1[] = "Hello";char strA2[] = "Hello";char strB1[] = "Study";char strB2[] = "Student";char strC1[] = "Happy";char strC2[] = "Hello";char strD1[] = "Windows";char strD2[] = "Windows Program Design";char strE1[] = "Microsoft Foundation Class Library";char strE2[] = "Microsoft";res_a = strcmp(strA1, strA2);res_b = strcmp(strB1, strB2);res_c = strcmp(strC1, strC2);res_d = strcmp(strD1, strD2);res_e = strcmp(strE1, strE2);printf("\t字符串比较结果:\n");printf("\t%d %d %d %d %d", res_a, res_b, res_c, res_d, res_e);return 0;
}
上述代码,是可以直接在 Visual Studio 里面运行的。
大家若是还不会使用 Visual Studio,可以参考下述链接所示的两篇文章,来学习使用 Visual Studio 来建立解决方案和编译运行解决方案的方法。
Windows编程:使用 VS2010 编写 C语言程序-CSDN博客
Windows编程:用 VS2019 编写C语言程序-CSDN博客
运行结果为如下。

三. strcmp 的 C++ 代码示例
代码如下。
#include <iostream>
#include <cstring>
using namespace std;int main(void)
{int res_a, res_b, res_c, res_d, res_e;char strA1[] = "Hello";char strA2[] = "Hello";char strB1[] = "Study";char strB2[] = "Student";char strC1[] = "Happy";char strC2[] = "Hello";char strD1[] = "Windows";char strD2[] = "Windows Program Design";char strE1[] = "Microsoft Foundation Class Library";char strE2[] = "Microsoft";res_a = strcmp(strA1, strA2);res_b = strcmp(strB1, strB2);res_c = strcmp(strC1, strC2);res_d = strcmp(strD1, strD2);res_e = strcmp(strE1, strE2);cout << "\t字符串比较结果:\n";cout << "\t" << res_a<< " " <<res_b<< " " << res_c<< " " << res_d<< " " << res_e << endl;return 0;
}
结束语
strcmp 函数不难。有可能,我的表述有点令你困惑。
看一看代码与运行结果,我相信你能理解。
专栏导航
本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。
(一)WIn32 专栏导航
上一篇:编程技能:字符串函数07,strncat
回到目录
下一篇:无
(二)MFC 专栏导航
上一篇:编程技能:字符串函数07,strncat
回到目录
下一篇:无