当前位置: 首页 > news >正文

编程技能:字符串函数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博客

运算结果如下:

图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

回到目录

下一篇:无

http://www.xdnf.cn/news/574705.html

相关文章:

  • 阿里云数据盘级别
  • C++ for QWidget:正则表达式和QRegExp
  • 六:操作系统虚拟内存之页替换算法
  • 101个α因子#12
  • nmtui工具使用教程
  • Halcon数据类型
  • RUP的9个核心工作流在电商平台项目中的拆解
  • 操作系统理解(xv6)
  • java进阶 1.0.2
  • ai建模平台:AnKo革新智能创作体验新纪元!
  • 以加减法计算器为例,了解C++命名作用域与函数调用
  • Vue3使用DataV报错无法使用的解决方案
  • 使用allure生成自动化测试报告
  • 通过TDE透明加密实现SQL Server数据库免改造加密
  • 反弹shell
  • MySQL临时表和内存表
  • C11 日期时间处理案例
  • AtCoder 第406场初级竞赛 A~E题解
  • 学习黑客了解密码学
  • Coze工作流-变量以及变量的类型讲解
  • 最新版Chrome浏览器调用ActiveX控件之eDrawings Viewer专用包v2.0.42版本发布
  • 【AI流程应用】智能知识库搭建与实战应用
  • RK3588 RKNN ResNet50推理测试
  • Spring 定时器和异步线程池 实践指南
  • COMP3023 Design and Analysis of Algorithms
  • ./build/mkfs.jffs2: Command not found
  • 车载诊断架构 --- LIN 节点 ECU 故障设计原则
  • C++继承:从生活实例谈面向对象的精髓
  • 零基础设计模式——创建型模式 - 生成器模式
  • 时源芯微|六大步骤解决EMC问题