编程技能:字符串函数09,strncmp

发布于:2025-05-21 ⋅ 阅读:(20) ⋅ 点赞:(0)

专栏导航

本节文章分别属于《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博客

运算结果如下:

图1

三.    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

回到目录

下一篇:无


网站公告

今日签到

点亮在社区的每一天
去签到