文档视频讲解链接地址
- 腾讯课堂链接 : 47_数组_字符串函数strcmp
- 腾讯课堂链接 : 48_数组_字符串函数strncmp与strlen
- 腾讯课堂链接 : 49_数组_数组小节复习
5.8 字符串函数strlen,strcmp,strncmp
strcmp函数- 字符串比较函数
- 格式:strcmp(字符串1,字符串2)
- 功能:比较两个字符串
- 比较规则:对两串从左向右逐个字符比较(ASCII码),直到遇到不同字符或‘\0’为止
- 返回值:返回int型整数,
- 若字符串1< 字符串2, 返回负整数
- 若字符串1> 字符串2, 返回正整数
- 若字符串1== 字符串2, 返回零
- 说明:字符串比较不能用“==”,必须用strcmp
实例65
使用strcmp函数比较两个字符串的大小关系。- 源文件
01-cbase\65-strcmp.c
- 源代码
#include <stdio.h> #include <string.h> int main(int argc, char const *argv[]) { char str1[100]={0},str2[50]={0}; int ret ; printf("请输入第1个字符串 >:") ; scanf("%s",str1); printf("请输入第2个字符串 >:"); scanf("%s",str2); printf("str1=%s\n",str1); printf("str2=%s\n",str2); ret = strcmp(str1,str2) ; if(ret < 0) // str1 < str2 { printf("%s < %s",str1,str2); } else if(ret > 0) // str1 > str2 { printf("%s > %s",str1,str2); } else { printf("%s == %s",str1,str2); } return 0; }
- 运行结果
// 第1次输入 请输入第1个字符串 >:goodbye 请输入第2个字符串 >:goodbya str1=goodbye str2=goodbya goodbye > goodbya // 第2次输入: 请输入第1个字符串 >:godobye 请输入第2个字符串 >:goodbye str1=godobye str2=goodbye godobye < goodbye // 第2次输入: 请输入第1个字符串 >:goodbye 请输入第2个字符串 >:goodbye str1=goodbye str2=goodbye goodbye == goodbye
实例66
使用strcmp函数对输入的数据进行识别
- 源文件
01-cbase\66-strcmp.c
- 源代码
#include <stdio.h> #include <string.h> int main(int argc, char const *argv[]) { char str1[100] = {0}; printf("请输入你的选择(yes/no) >:"); scanf("%s", str1); printf("str1=%s\n", str1); if (strcmp(str1, "yes") == 0) // 表示用户输入的 yes { printf("你的选择是:yes\n"); } else if (strcmp(str1, "no") == 0) // 表示用户输入的 no { printf("你的选择是:no\n"); } else { printf("你的输入有误,请重新输入\n"); } return 0; }
- 运行结果
// 第一次 请输入你的选择(yes/no) >:yes 你的选择是:yes // 第二次 请输入你的选择(yes/no) >:no 你的选择是:no // 第三次 请输入你的选择(yes/no) >:haha 你的输入有误,请重新输入
实例67
编程使用自己的代码实现strcmp函数实的比较功能, 不能使用strcmp函数。
提示: 使用while循环, 从左往右逐个比较字符。遇到 '\0’或不等于0是停止比较
- 源文件
01-cbase\67-mystrcmp.c
- 源代码
#include <stdio.h> #include <string.h> int main(int argc, char const *argv[]) { char str1[100] = {0}, str2[50] = {0}; printf("请输入第1个字符串 >:"); scanf("%s", str1); printf("请输入第2个字符串 >:"); scanf("%s", str2); printf("str1=%s\n", str1); printf("str2=%s\n", str2); // int ret = strcmp(str1,str2) ; // 比较str1 和str2 的大小关系 int ret, i = 0; while (1) { ret = str1[i] - str2[i]; if (ret < 0) // str1 < str2 { printf("%s < %s\n", str1, str2); break; } else if (ret > 0) // str1 > str2 { printf("%s > %s\n", str1, str2); break; } else // str1[i] == str2[i] { if (str1[i] == '\0') // 表示 str1[i] == str2[i] == '\0' , 两个字符串已经相等 { printf("%s == %s\n", str1, str2); break; } i++ ; // 往后移动 } } return 0; }
- 运行结果
// 第1次输入 请输入第1个字符串 >:goodbye 请输入第2个字符串 >:goodbya str1=goodbye str2=goodbya goodbye > goodbya // 第2次输入: 请输入第1个字符串 >:godobye 请输入第2个字符串 >:goodbye str1=godobye str2=goodbye godobye < goodbye // 第2次输入: 请输入第1个字符串 >:goodbye 请输入第2个字符串 >:goodbye str1=goodbye str2=goodbye goodbye == goodbye
strlen函数- 计算字符串长度函数
格式:strlen(字符数组名)
功能:计算字符串长度,遇到‘\0’停止
返值:返回字符串实际长度,不包括‘\0’在内
例如:
- 答案: 1 3 1
实例68
输入一个字符串使用strlen函数计算字符串的长度 。- 源文件
01-cbase\68-strlen.c
- 源代码
#include <stdio.h> #include <string.h> int main(int argc, char const *argv[]) { char s1[10] = {'A','\0','B','C','\0','D'} ; char s2[] = "\t\v\\\0will\n" ; // \t , \v , \\ , \0 是字符串结束标志 char s3[] = "\x69\082\n" ; // \x69 是0x69的写法 \082 , 系统会把\0 当做一个字符 printf("strlen(s1)=%d\n",strlen(s1)); printf("strlen(s2)=%d\n",strlen(s2)); printf("strlen(s3)=%d\n",strlen(s3)); printf("s3[0]=%#x\n",s3[0]); // \x69 printf("s3[1]=%#x\n",s3[1]); // \0 return 0; }
- 运行结果
strlen(s1)=1 strlen(s2)=3 strlen(s3)=1 s3[0]=0x69 s3[1]=0
实例69
编程使用自己的代码实现strlen函数实的功能, 不能使用strlen函数。
- 源文件
01-cbase\69-mystrlen.c
- 源代码
#include <stdio.h> #include <string.h> int main(int argc, char const *argv[]) { char str[100]={0}; printf("请输入一个字符串 >:"); scanf("%s",str); printf("str=%s\n",str); // mystrlen int len = 0 ; // str[len] 的字符不等于 '\0' , 说明字符串没有结束, 需要继续移动 // str[len] 的字符等于 '\0' , 说明字符串结束, 需要结束计数 , len 的值就是字符串长度 while(str[len] != '\0') { len ++ ; } printf("len=%d\n",len); // len 就是字符串的长度 return 0; }
- 运行结果
请输入一个字符串 >:helloworld str=helloworld len=10
strncmp 函数
- 格式:strncmp (字符数组名)
int strncmp(const char *s1, const char *s2, size_t n);
- 功能:比较两个字符串前n个字符,
- 比较规则:对两串从左向右逐个字符比较(ASCII码),直到遇到不同字符或‘\0’为止
- 返回值:返回int型整数,
- 若字符串1< 字符串2, 返回负整数
- 若字符串1> 字符串2, 返回正整数
- 若字符串1== 字符串2, 返回零
- 说明:字符串比较不能用“==”,必须用strcmp
实例70
使用strncmp函数比较输入选项是yes/no
- 源文件
01-cbase\70-strncmp.c
- 源代码
#include <stdio.h> #include <string.h> int main(int argc, char const *argv[]) { char str1[100] = {0}; printf("请输入你的选择(yes/no) >:"); scanf("%s", str1); printf("str1=%s\n", str1); if (strncmp(str1, "yes",1) == 0) // 表示用户输入的 yes { printf("你的选择是:yes\n"); } else if (strncmp(str1, "no",1) == 0) // 表示用户输入的 no { printf("你的选择是:no\n"); } else { printf("你的输入有误,请重新输入\n"); } return 0; }
- 运行结果
// 第一次 请输入你的选择(yes/no) >:yes str1=yes 你的选择是:yes // 第二次 请输入你的选择(yes/no) >:no str1=no 你的选择是:no // 第三次 请输入你的选择(yes/no) >:y str1=y 你的选择是:yes //第四次 请输入你的选择(yes/no) >:n str1=n 你的选择是:no //第五次 请输入你的选择(yes/no) >:u str1=u 你的输入有误,请重新输入
本文含有隐藏内容,请 开通VIP 后查看