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

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

运行结果为如下。

图1

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

回到目录

下一篇:无

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

相关文章:

  • 刚刚!2025年5月WOS期刊目录已更新,新增多本期刊,剔除1本SCI期刊,慎投!
  • 软件测试期末复习
  • 深入解析OrientDB:多模型数据库的技术优势与实际应用
  • 如何从不同位置将联系人导入 iPhone(完整指南)
  • STM32定时器简单采集编码器脉冲
  • 【ubuntu服务器显卡老是坏掉】
  • BGP边界网关协议
  • 9、AI测试辅助-代码Bug分析提示词优化
  • 静态代理有哪些优势
  • 深入理解指针(一)
  • HarmonyOS实战:3秒实现一个自定义轮播图
  • 纯前端实现 导入/导出/模板下载功能
  • 变频器如何通过Profibus DP主站转Modbus RTU/TCP接入到上位机
  • DeepSeek的走红,会不会带动芯片市场新一轮增长?
  • Java中的ImageIo支持webp解析
  • 小白成长之路-Linux磁盘管理(一)
  • 如何管理和优化内核参数
  • [IMX] 07.LCD 显示
  • 【高斯函数】
  • 驱动相关基础
  • leetcode刷题日记——从前序与中序遍历序列构造二叉树
  • MES管理系统电子看板驱动企业智能制造
  • python Numpy-数组
  • 探索nsupdate:动态DNS更新的终极指南
  • 码钉枪行业2025数据分析报告
  • Java程序员从0学AI(二)
  • 使用F5-tts复刻音色
  • ArrayList源码分析
  • 实现商品列表
  • 建站系统哪个好?