13-C语言字符串函数库
目录:
一、C语言字符串函数库
1 #include <string.h>
2 字符串复制
strcpy(参数1,参数2);
参数1:目标字符串位置(复制到哪里)
参数2:源字符串(来源)
3 字符串拼接函数
strcat(参数1,参数2);
参数1:第一个字符串
参数2:第二个字符串
将第一个字符串的内容与第二个字符串的内容拼接在一起,保存在第一个字符串中。
4 字符串长度
strlen(str);
参数为字符串,返回字符串长度,不包含结束符。
5 字符串比较函数
strcmp(参数1,参数2);
根据ASCII码表来比较字符串中每一个字符是否相等,结果为两个字符串的差值,差值为0,字符串相等,否则不相等。
练习:模拟系统登录,提示输入用户名、密码,和数据库匹配,用户名:admin密码:123登录成功,否则登录失败,重新登录,输入错误3次,退出程序。
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 5 //strcpy字符串复制函数 6 void test(){ 7 char* str = "hello"; 8 char str2[10]; 9 strcpy(str2, str);//字符串复制函数,把str的字符串赋给str2,该函数返回新复制的字符串的首地址 10 printf("str2:%s\n",str2); 11 printf("str2 address:%p\n",strcpy(str2, str)); 12 } 13 14 //strcat字符串拼接函数 15 void test2(){ 16 char str3[20] = {'h','e','l','l','o','\0'};//定义字符串变量 17 char* str4 = " world";//定义字符串常量 18 strcat(str3,str4);//这里不能调换位置,因为str4值不能修改 19 printf("str3:%s\n",str3); 20 } 21 22 //strlen字符串长度函数 23 void test3(){ 24 char str3[20] = {'h','e','l','l','o','\0'}; 25 printf("str3 length:%zd\n",strlen(str3));//不包括结束符'\0',strlen参数存放数组名、字符指针名以及字符常量,该函数返回int型整数 26 } 27 28 //strcmp字符串比较函数 29 void test4(){ 30 char* str5 = "A"; 31 char str6[6] = {'A','\0'}; 32 int res = strcmp(str5, str6);//相等返回0,不相等返回差值(str5 - str6) 33 printf("res:%d\n",res); 34 if (res == 0) {//也可以写!res 35 printf("字符串相等\n"); 36 }else{ 37 printf("字符串不相等"); 38 } 39 } 40 int main(int argc, const char * argv[]) 41 { 42 /* 43 练习:模拟系统登录,提示输入用户名、密码,和数据库匹配,用户名:admin密码:123登录成功,否则登录失败,重新登录,输入错误3次,退出程序。 44 */ 45 char* db_username = "admin\n"; 46 char* db_password = "123\n"; 47 char username[10]; 48 char password[10]; 49 for (int i = 0; i < 3; i++) { 50 printf("输入用户名:\n"); 51 fgets(username, 10, stdin); 52 printf("输入密码:\n"); 53 fgets(password, 10, stdin); 54 int res_username = strcmp(db_username, username); 55 int res_password = strcmp(db_password, password); 56 57 if (res_username == 0 && res_password == 0) { 58 printf("登录成功!欢迎您。\n"); 59 break; 60 }else{ 61 if (i == 2) { 62 printf("对不起!登录超过三次。\n"); 63 exit(0);//退出系统 64 } 65 printf("登录失败!请重新登录。\n"); 66 } 67 } 68 return 0; 69 }
二、用命令行输入参数
1 argc代表命令行的参数个数(包含命令本身)
2 *argv[]代表命令行的参数的值(字符串)(包含命令本身)
3 运行:./a.out abc hahaha
1 #include <stdio.h> 2 3 int main(int argc, const char * argv[]) 4 { 5 6 // insert code here... 7 printf("argc, %d!\n",argc); 8 for (int i = 0; i < argc; i++) { 9 printf("argv[%d]:%s\n",i,argv[i]); 10 } 11 /* 12 tarenatekiMac-mini-3:命令行参数 tarena$ cc main.c 13 tarenatekiMac-mini-3:命令行参数 tarena$ ./a.out 14 argc, 1! 15 argv[0]:./a.out 16 tarenatekiMac-mini-3:命令行参数 tarena$ ./a.out a ccc 17 argc, 3! 18 argv[0]:./a.out 19 argv[1]:a 20 argv[2]:ccc 21 tarenatekiMac-mini-3:命令行参数 tarena$ 22 */ 23 return 0; 24 }
练习:
定义五虎上将,guanyu、zhangfei、zhaoyun、huangzhong、machao,通过命令行方式,输入一个人名,然后判断输出,是否是五虎上将,结果输出到屏幕上。
#include <stdio.h> #include <string.h> int main(int argc, const char * argv[]) { char* names[5] = {"guanyu","zhangfei","zhaoyun","huangzhong","machao"}; printf("argc, %d!\n",argc); for (int i = 0; i < argc; i++) { printf("argv[%d]:%s\n",i,argv[i]); if (strcmp(argv[i],names[0]) == 0 || strcmp(argv[i],names[1]) == 0 || strcmp(argv[i],names[2]) == 0 || strcmp(argv[i],names[3]) == 0 || strcmp(argv[i],names[4]) == 0) { printf("是:%s\n",argv[i]); }else{ printf("不是\n"); } } return 0; }