C语言:比较两个字符串是否相等
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语言:比较两个字符串是否相等相关推荐
- php两个字符串公共,C++_C语言求两个字符串的最长公共子串,本文实例讲述了C语言求两个字 - phpStudy...
C语言求两个字符串的最长公共子串 本文实例讲述了C语言求两个字符串的最长公共子串的方法.分享给大家供大家参考.具体实现方法如下: #include "stdio.h" #inclu ...
- C语言比较两个字符串相等为什么不是用“==”
C语言比较两个字符串相等为什么不是用"=="? 今天在学习C语言编程时,遇到需要比较两个字符串是否相等的问题,习惯性的想到用"=="去比较,可是输出的结果却大相 ...
- 14c语言合并两个字符串,C语言的标识符和字符数据、字符串数据.ppt
1·2 C语言的标识符和字符数据.字符串数据 本节的任务是掌握用printf()函 数在屏幕的任意位置打印字 符组成的图案. 1·2·1 C语言的字符串数据.字符数据和转义字符 • 例1_1_2 用p ...
- C语言 | 将两个字符串连接起来,不用stract
例67:C语言编写一个程序,将两个字符串连接起来,不要用strcat函数. 解题思路:首先要有两个键盘录入,实现录入字符串1和字符串2,然后实现拼接,读者看这道例题的时候,可以先想想要是用strcat ...
- C语言连接两个字符串
一种是使用C语言自带的strcat函数来完成,strcat(str1,str2),可以将str2指定的字符串连接到str1指定的字符串后面,结果存储在指定的字符数组中,str1指定的字符串原来最后面的 ...
- c语言比较两个字符串是否相等strcmp
c语言提供了几个标准库函数,可以比较两个字符串是否相同.以下是用strcmp()函数比较字符串的一个例子: #include <stdio.h> #include <string.h ...
- C语言 判断两个字符串大小相等关系
#include<stdio.h> #include<string.h> void stringCMP(char[],char[]);//比较两个字符串的大小 void mai ...
- c语言 连接两个字符串不使用库函数
#include<stdio.h> void main(){//输入两个字符串并连接 不能使用库函数strcat//字符串str1printf("please enter str ...
- c语言寻找公共字符串,C语言查找两个字符串中的最大公共子串
#include #include #include char *commonstring(char *str1,char *str2) { int i,j; char *longstr,*short ...
- C语言判断两个字符串是否相等
可以使用库函数strcmp比较.strcmp是C语言比较字符串的库函数.形式为int strcmp(char *a, char *b);该函数会对a和b的每个字符,按照ascii码值比较,如果二者完全 ...
最新文章
- 编码原则:不变量/前置条件/后置条件
- CodeForces - 787D - Legacy(线段树优化建图+最短路)
- 为什么jdk中把String类设计成final
- cisco最经典书籍 下载(全CCIE们的结晶)转载资料
- java struts2 作用_struts2是什么?如何使用?
- Spring源码之ApplicationContext(八)消息广播
- Spring概况(一)
- Delphi 2007 先睹为快
- 最快的BT软件rtorrent Step by Step指南
- Android Studio导入工程项目一直处于gradle....而且一直卡在这个页面
- three后期处理与多通道渲染
- (附源码)计算机毕业设计SSM语言学习系统
- 逐梦人工智能,普通人也能用百度AI实现梦想
- SLAM导航机器人零基础实战系列:(四)差分底盘设计——2.stm32主控软件设计
- python矩阵和向量乘积_矩阵与向量的乘积
- Java地位被撼动?Java与JavaScript的趣事连载
- [学习笔记] 二进制小数表示方法
- 微聊 仿微信聊天android app 开源
- C++实现求小于n的所有素数
- ANTLR4(十三)解决歧义性总结