编写strcmp 和strncmp
函数原型及介绍
若str1==str2,则返回零;
若str1 > str2,则返回正数;
若str1< str2,则返回负数。
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止。
如下几种情况:
strcmp(“abcd”,”abcd”)的返回值是 0;
strcmp(“abcd”,”dcba”)的返回值是 -1;
strcmp(“dcba”,”abcd”)的返回值是 1;
其它:
strcmp(“A”,”C”)的返回值是 -2;
strcmp(“C”,”A”)的返回值是 2;
这个确切的数值是依赖不同的c的实现
特别注意: strcmp(const char s1,const char s2) 这里面只能比较字符串,即可用于比较两个字符串常量,或比较数组和字符串常量,不能比较数字等其他形式的参数。
strncmp函数是指定=比较size个字符==。也就是说,如果字符串s1与s2的前size个字符相同,函数返回值为0。此函数功能即比较字符串str1和str2的前maxlen个字符。如果前maxlen字节完全相等,返回值就=0;在前maxlen字节比较过程中,如果出现str1[n]与str2[n]不等,则依次比较str1和str2的前n位,设i(i< n)为两字符串首次的不同位,则返回(str1[i]-str2[i])。
如下几种情况:
str1=”ABCDHG”,str2=”ABCDEF”
strncmp(str1,str2,4)的返回值是 0;
strncmp(str1,str2,5)的返回值是 1;
说明: 比较字符串str1和str2的大小,如果str1小于str2,返回值就==<0==,反之如果str1大于str2,返回值就==>0==,如果str1等于str2,返回值就=0,len指的是str1与str2的比较的字符数。此函数功能即比较字符串str1和str2的前len个字符。
提示: 该函数区分大小写。
编写小练习
strcmp
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>// strcmpy => compare
void func1()
{ char buf1[64] = "hello";printf("%s\n",buf1);char buf2[64] = "";fgets(buf2,sizeof(buf2),stdin);buf2[strlen(buf2) - 1] = '\0'; // 下标回车键需要改成‘\0’if (strcmp(buf1, buf2) == 0) {printf("buf1==buf2\n");}else if(strcmp(buf1,buf2) > 0){printf("buf1 > buf2\n");}else {printf("buf1 < buf2\n");}}
int main()
{func1();system("pause");return 0;
}
strcnmp
void func2()
{printf("请输入一个季节 spring summer autumn winter\n");char buf[64] = "";fgets(buf,64,stdin);buf[strlen(buf) - 1] = '\0';if (strncmp(buf, "spring", 6) == 0) {printf("春天\n");}else if (strncmp(buf, "summer", 6) == 0) {printf("夏天\n");}else if (strncmp(buf, "autumn", 6) == 0) {printf("秋天\n");}else if (strncmp(buf, "winter", 6) == 0) {printf("冬天\n");}}
int main()
{func2();system("pause");return 0;
}
strcmp和strncmp封装函数编写
1.strcmp
#include<stdio.h>
#include<assert.h>int my_strcmp(const char* pc1, const char* pc2)
{assert(pc1 != NULL && pc2 != NULL);while (*pc1 == *pc2){if (*pc1 == '\0'){return 0;}pc1++;pc2++;}if (*pc1 > *pc2){return 1;}else if (*pc1 < *pc2){return -1;}
}int main()
{char arr1[10];char arr2[10];printf("请输入第一个字符串:>\n");gets(arr1);printf("请输入第二个字符串:>\n");gets(arr2);int ret = my_strcmp(arr1, arr2);if (ret == -1){printf("第一串 小于 第二串\n");}else if (ret == 1){printf("第一串 大于 第二串\n");}else {printf("两串字符串相等 \n");}
}
2.strncmp
#include<stdio.h>
#include<assert.h>
#include<string.h>
int my_strcnmp(const char *str,const char *str1,int n)
{char *p = (char *)str;char *q = (char *)str1;assert(str);assert(str1);while(n--){if(*p == *q){p++;q++;}else{return (*p - *q);}}return 0;
}
int main()
{char str[]="You are beautiful!";char str1[]="You are great!";printf("%d\n",my_strncmp(str,str1,20));printf("%d\n",strncmp(str,str1,20));//与上面实现的库函数作比较。return 0;
}
编写strcmp 和strncmp相关推荐
- 【面试题】C语言:模拟实现memcmp,试比较memcmp与strcmp,strncmp的区别
模拟实现内存比较函数memcmp: 该函数与strcmp有相似之处,都可用于字符串比较是否相同,若相同,则返回0值.若前者大于后者,则返回大于0的整型值,否则返回小于0的整型值. 区别在于: str ...
- C语言——数组、字符串处理函数、strlen、strcpy和strncpy、strcat和strncat、strcmp和strncmp
目录 一.数组 1.定义:类型 数组名[元素个数] 2.数组不能动态定义 3.如何访问数组中的元素:数组名[下标] 4.循环与数组的关系 5.数组的初始化 二.C99标准中的数组 三.字符串处理函数 ...
- 编写strcmp函数
编写strcmp函数,不使用库函数,相等返回0,不等返回1. #include<stdio.h> #include<stdlib.h> int strcmp(char *sou ...
- C语言 : strcmp与strncmp详解
strcmp与strncmp都是用来比较字符串的,区别在于能否比较指定长度字符串. strcmp 设这两个字符串为str1,str2, 若str1==str2,则返回零: 若str1 > str ...
- strcmp与strncmp的区别
strcmp与strncmp都是用来比较字符串的,区别在于strncmp是比较指定长度字符串,两者都是二进制安全的,且区分大小写. strcmp strcmp(string1,string2) 设这两 ...
- C语言中如何编写strcmp(),stract()和strcpy()
C语言中编写strcmp(),stract()和strcpy() 2008年04月03日 星期四 14:47 char * strcpy(char * dest,const char *src) { ...
- strcmp和strncmp函数
1.strcmp This function starts comparing the first character of each string. If they are equal to each ...
- c语言strcmp() 和strncmp()
一. strcmp() 包含头文件:#include <string.h> 1. 函数原型 int strcmp(const char *str1, const char *str2); ...
- 用c语言strncmp函数,strcmp和strncmp函数
1.strcmp This function starts comparing the first character of each string. If they are equal to each ...
最新文章
- 技术详解 | 如何用GAN实现阴影检测和阴影去除?
- 不同浏览器前端调试查看返回页面的json数据
- Tensorflow yolov3 Intel Realsense D435 多进程multiprocessing线程池pool识别时间测试
- docker 查看已安装容器_WIN7下安装Docker容器
- 论文共读 | “阳奉阴违”的半监督学习算法 - Virtual Adversarial Training
- Go语言实例系列【 获得url实例】
- 哈啰出行赴美递交招股书:2020年营收60亿元 顺风车成新增长极
- 【剑指Offer】18树的子结构
- 飞机大战游戏源html代码,HTML5全民飞机大战游戏代码
- PS仿制图章工具、油桶工具、渐变
- 记一次带宽跑满服务器卡死事故处理
- python数据可视化之美源码_Python数据可视化之美-专业图
- MediaPlayer提示“无法播放视频”
- 安卓解析xml格式字符串
- 常见充值方式介绍及对比
- 陪伴难道是最长情的告白吗
- 玩转电脑|WIN10如何添加打印机扫描到电脑
- ZeroTier-One配置moon心得
- 使用包configparser,出现UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 155: illegal mu
- 服务器如何上线node.js项目【项目放置在github中】