编程技能:字符串函数09,strncmp
专栏导航
本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。
(一)WIn32 专栏导航
上一篇:编程技能:字符串函数08,strcmp
回到目录
下一篇:无
(二)MFC 专栏导航
上一篇:编程技能:字符串函数08,strcmp
回到目录
下一篇:无
本节前言
上一节,我们讲解的是一个字符串比较函数,strcmp 。
本节,我们来讲解另一个字符串比较函数,strncmp 。
一. strncmp 基本介绍
想要使用 strncmp 函数,如果是想要在 C 语言里面使用,那么,你需要有【#include <string.h>】一行。如果是想要在 C++ 里面使用,你需要有【#include <cstring>】一行。
下面,是 strncmp 函数的原型声明。
int strncmp(const char * cs,const char * ct,int count);
我在这里所列的原型声明,它只是我从 Linux 0.12 内核中提取出来的一种声明而已。在 Visual Studio 里面,它的声明形式不是这样子的。但是呢,我在这里列举出来的声明,它是可用的。
此函数的功能是,比较 cs 和 ct 所指向的字符串的前 count 个字符。比较的时候,是以字符的 ASCII 码的值来进行比较。比较的情况,分为以下几种。
(一)假定 cs 与 ct 里面,长度较小的字符串,所包含的有效字符数量为 len 。也就是,除去 NUL 结束符,两者之中的较短的那个字符串,包含着 len 个字符。然后呢,我们假定,【count <= len】。在此基础上,两个字符串的前 count 个字符里面,每一个对应位置的字符的 ASCII 码均相等。对于这种情况,返回 0 值。例如,strncmp("county", "country", 5) 。
(二)两个字符串在比较前面的 0 个或多个字符的 ASCII 码值的时候,均相等。到了某一位,不相等了。此时,若是 cs 所指向的字符串的该位字符的 ASCII 码值大于 ct 的对应字符的 ASCII 码值,则返回正数。例如,strncmp( "country", "continue", 6) 。
(三)两个字符串在比较前面的 0 个或多个字符的 ASCII 码值的时候,均相等。到了某一位,不相等了。此时,若是 cs 所指向的字符串的该位字符的 ASCII 码值小于 ct 的对应字符的 ASCII 码值,则返回负数。例如,strncmp("Happiness", "Heightness", 6) 。
(四)cs 字符串的有效字符长度大于 len,ct 字符串的有效字符长度为 len,参数 count 的值也大于 len 。有效字符长度,是指某一个字符串的不包含 NUL 结束符在内的,有效字符的个数。假定在比较前 len 个字符的时候,两个字符串的对应字符的 ASCII 码均相等。再往下比较的时候,cs 的对应字符并非 '\0',而 ct 的对应字符为 '\0',此时,返回正数。例如,strncmp("Heightness", "Height", 6) 。
(五)cs 字符串的有效字符长度为 len,ct 字符串的有效字符长度大于 len,参数 count 的值也大于 len 。有效字符长度,是指某一个字符串的不包含 NUL 结束符在内的,有效字符的个数。假定在比较前 len 个字符的时候,两个字符串的对应字符的 ASCII 码均相等。再往下比较的时候,cs 的对应字符为 '\0',而 ct 的对应字符并非 '\0',此时,返回负数。例如,strncmp("Cap", "Caption", 4) 。
到了这里,基础知识部分,我们就算是讲完了。
接下来,我们分别给出 C 语言示例代码与 C++ 示例代码。
二. strncmp 的 C 语言代码示例
代码如下。
#include <stdio.h>
#include <string.h>int main(void)
{int res_a, res_b, res_c, res_d, res_e;char strA1[] = "county";char strA2[] = "country";char strB1[] = "country";char strB2[] = "continue";char strC1[] = "Happiness";char strC2[] = "Heightness";char strD1[] = "Heightness";char strD2[] = "Height";char strE1[] = "Cap";char strE2[] = "Caption";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\n", 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博客
运算结果如下:

三. strncmp 的 C++ 代码示例
代码如下。
#include <iostream>
#include <cstring>
using namespace std;int main(void)
{int res_a, res_b, res_c, res_d, res_e;char strA1[] = "county";char strA2[] = "country";char strB1[] = "country";char strB2[] = "continue";char strC1[] = "Happiness";char strC2[] = "Heightness";char strD1[] = "Heightness";char strD2[] = "Height";char strE1[] = "Cap";char strE2[] = "Caption";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;
}
结束语
strncmp 不难。希望你能够理解本节的内容。
到了这里,字符串比较,我们也算是学完了。
下一节开始,我们来学习在字符串中定位字符。
专栏导航
本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。
(一)WIn32 专栏导航
上一篇:编程技能:字符串函数08,strcmp
回到目录
下一篇:无
(二)MFC 专栏导航
上一篇:编程技能:字符串函数08,strcmp
回到目录
下一篇:无