1) 使用strcmp进行比较

下面通过一个例子进行演示:

#include <stdio.h>
#include <string.h>int main(void)
{char* str1 = "abc";char* str2 = "abc";if (strcmp(str1, str2) == 0) {printf("str1和str2相同!\n");}else {printf("str1和str2不相同!\n");}return 0;
}

讲解上面的程序:

定义了一个char(字符型)的指针变量str1,并且初始化为 "abc"

定义了一个char(字符型)的指针变量str2,并且初始化为 "abc"

通过strcmp进行比较两个字符串是否相同,如果相同返回0(详细见strcmp百度百科)

2) strcmp的实现

(实现代码来源于strcmp百度百科)

int __cdecl strcmp (const char *src, const char *dst)
{int ret = 0 ;while(!(ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst){++src;++dst;}if ( ret < 0 )ret = -1 ;else if ( ret > 0 )ret = 1 ;return( ret );
}

下面进行讲解:

定义了一个int(整型)的变量ret,并且初始化为0

(unsigned char*) src 表示将src强制转换为unsigned(无符号)的char(字符型)变量 (同理dst)

*(unsigned char*) src 表示获取src中的数据(同理dst)

*(unsigned char*) src - *(unsigned char*)dst,

*(unsigned char*) src表示获取当前src的数据,(假设为"a")

*(unsigned char*)dst表示获取当前dst的数据,(假设为"a")

根据ASCII码表 "a"为65,(ASCII码表)

所以src - dst,所表示的就是 65 - 65,返回结果为0

(ret = *(unsigned char *)src - *(unsigned char *)dst),所以ret 为0

!(ret = *(unsigned char *)src - *(unsigned char *)dst),取反ret

*dst,*dst为获取dst的数据,因为每个字符串的结尾都有一个"\0"(ASCII码表中为0)

判断true和false,其实就是0为false,非0为true,所以可以得出,

如果dst到了字符串末尾,则退出循环

++src,表示将src的指针向后移动一位(同理dst) (如果这里不懂的可以看下面)

下面的if...else if则是根据ret的返回值进行返回对应的数值(详细见strcmp百度百科)

PS :(因为char、unsigned char 都只占一个字符,所以*src也就获取当前src所指向的字符)

3)不懂++src的可以看下

++src,表示将src的指针向后移动一位

好的,下面进行讲解:

假设当前src的地址为(0x00898b3c),

先说src的类型,当前src的类型为char(字符型),char所占内存大小为1字节,

所以++src后src的地址就变成了(0x00898b3d),

最后通过++src也就能遍历整个src所指向的内存地址中的数据,然后和dst比较

首先假设src当前所指向的是 "abc" 的内存地址

当前src为(0x00898b3c),所指向的是"a"

所以*src也就是为"a",(可能你们会疑问为什么是"a")

因为char所占内存大小为1字节,

所以*src获取的数据也就只获取当前src当前所指向的内存地址的一位中的数据,

可以这样理解:

(0x00898b3c)中为"a"

(0x00898b3d)中为"b"

(0x00898b3e)中为"c"

(0x00898b3f)中为"\0"

所以++src就是不断向后移动指针进行遍历"abc"中的每个字符

C语言:比较两个字符串是否相等相关推荐

  1. php两个字符串公共,C++_C语言求两个字符串的最长公共子串,本文实例讲述了C语言求两个字 - phpStudy...

    C语言求两个字符串的最长公共子串 本文实例讲述了C语言求两个字符串的最长公共子串的方法.分享给大家供大家参考.具体实现方法如下: #include "stdio.h" #inclu ...

  2. C语言比较两个字符串相等为什么不是用“==”

    C语言比较两个字符串相等为什么不是用"=="? 今天在学习C语言编程时,遇到需要比较两个字符串是否相等的问题,习惯性的想到用"=="去比较,可是输出的结果却大相 ...

  3. 14c语言合并两个字符串,C语言的标识符和字符数据、字符串数据.ppt

    1·2 C语言的标识符和字符数据.字符串数据 本节的任务是掌握用printf()函 数在屏幕的任意位置打印字 符组成的图案. 1·2·1 C语言的字符串数据.字符数据和转义字符 • 例1_1_2 用p ...

  4. C语言 | 将两个字符串连接起来,不用stract

    例67:C语言编写一个程序,将两个字符串连接起来,不要用strcat函数. 解题思路:首先要有两个键盘录入,实现录入字符串1和字符串2,然后实现拼接,读者看这道例题的时候,可以先想想要是用strcat ...

  5. C语言连接两个字符串

    一种是使用C语言自带的strcat函数来完成,strcat(str1,str2),可以将str2指定的字符串连接到str1指定的字符串后面,结果存储在指定的字符数组中,str1指定的字符串原来最后面的 ...

  6. c语言比较两个字符串是否相等strcmp

    c语言提供了几个标准库函数,可以比较两个字符串是否相同.以下是用strcmp()函数比较字符串的一个例子: #include <stdio.h> #include <string.h ...

  7. C语言 判断两个字符串大小相等关系

    #include<stdio.h> #include<string.h> void stringCMP(char[],char[]);//比较两个字符串的大小 void mai ...

  8. c语言 连接两个字符串不使用库函数

    #include<stdio.h> void main(){//输入两个字符串并连接 不能使用库函数strcat//字符串str1printf("please enter str ...

  9. c语言寻找公共字符串,C语言查找两个字符串中的最大公共子串

    #include #include #include char *commonstring(char *str1,char *str2) { int i,j; char *longstr,*short ...

  10. C语言判断两个字符串是否相等

    可以使用库函数strcmp比较.strcmp是C语言比较字符串的库函数.形式为int strcmp(char *a, char *b);该函数会对a和b的每个字符,按照ascii码值比较,如果二者完全 ...

最新文章

  1. 编码原则:不变量/前置条件/后置条件
  2. CodeForces - 787D - Legacy(线段树优化建图+最短路)
  3. 为什么jdk中把String类设计成final
  4. cisco最经典书籍 下载(全CCIE们的结晶)转载资料
  5. java struts2 作用_struts2是什么?如何使用?
  6. Spring源码之ApplicationContext(八)消息广播
  7. Spring概况(一)
  8. Delphi 2007 先睹为快
  9. 最快的BT软件rtorrent Step by Step指南
  10. Android Studio导入工程项目一直处于gradle....而且一直卡在这个页面
  11. three后期处理与多通道渲染
  12. (附源码)计算机毕业设计SSM语言学习系统
  13. 逐梦人工智能,普通人也能用百度AI实现梦想
  14. SLAM导航机器人零基础实战系列:(四)差分底盘设计——2.stm32主控软件设计
  15. python矩阵和向量乘积_矩阵与向量的乘积
  16. Java地位被撼动?Java与JavaScript的趣事连载
  17. [学习笔记] 二进制小数表示方法
  18. 微聊 仿微信聊天android app 开源
  19. C++实现求小于n的所有素数
  20. ANTLR4(十三)解决歧义性总结

热门文章

  1. ubuntu-16.04安装教程
  2. 镜像法计算变压器漏磁场(二)
  3. ThinkPad L460笔记本如何换装win7系统?
  4. TFTP服务器搭建与测试
  5. Scala的集合体系
  6. ZenCart模板 B2C英文购物网站 外贸网站建设
  7. 关于添加msvcr120d.dll后0xc000007b的错误解决办法
  8. 广东省税务系统区块链出口退税业务上线成功
  9. 【笔记】P2P - 1 路由NAT(原理、四种类型、问题),P2P(概念、兼容NAT方案:ACL、upnp中间件、“打洞”、Relay)
  10. 数据结构复习之顺序表