字符串中一些比较常见的函数(strcmp,strcpy,memcmp,memcpy,memset,strcat,strchr等)
1.strcmp 与 strncmp
--------字符串比较(逐个字符比较)---------
如:int res =strcmp("字符串1 ","字符串2") 逐个字符比较,字符串1大,返回1;字符串1大,返回-1;相等,返回 0;
区别:strncmp 仅仅比较指定字符位数
如:char m[] = "libai"; char c[] = "liBai"; int res4 = strncmp(m, c, 2); //只比较两个数组前2个字符大小 前2位一样,其结果为0
#include#includeint main(){//strcmp strncmp//strcmp(char *str1,char *str2) 逐个字符比较str1 与str2的大小 ( str1大,返回1;str1小,返回-1;一样,返回0)char m[] = "libai";char n[] = "Libai";char c[] = "liBai";int res1 = strcmp(m, n); //因在ASCII中,小写比大写大,m大 1int res2 = strcmp(m, c);//m大 1int res3 = strcmp(c, m);//c小-1int res4 = strncmp(m, c, 2); //只比较两个数组前2个字符大小 0printf("res1:%d res2:%d res3:%d res4:%d\n", res1, res2, res3,res4); return 0;}
2.strcpy与strncpy
----------拷贝字符串-------将一个字符串拷贝到另一个字符串中去,可能会覆盖原来的值
区别:strncpy 取一个字符串中的指定字符位数,将其拷贝到目标字符串数值中
例如:strncpy(name, "you", 3); //拿“you”中的3个字符去拷贝name中的前3个字符
#include#includeint main(){//strcpy | strncpy 将一个字符串拷贝到另一个字符串中//strcmp("1","2")将字符串“2"拷贝到字符串"1"中去char name[10] = "I'm";strcpy(name, "libai");//拷贝后会把原来已有的字符覆盖掉(从左往右覆盖) 此时结果应为 libaiputs(name);//字符串输出函数,输出后会自动换行 相当于 printf("%s\n","string");strncpy(name, "you", 3); //拿“you”中的3个字符去拷贝name中的前3个字符puts(name); return 0;}
3.strchr 与strrchr
--------查找指定字符------------默认为从左往右查找 返回查找到的字符及后面的字符
区别:strrchr 从右往左查找
#include#includeint main(){//strchr strrchrchar words[] = "this is my book";char* pres = strchr(words, 's');//从左往右查找's'char* pres1 = strrchr(words, 's');//从右往左查找's'puts(pres); //输出从第一个’s‘开始后面的字符 结果为:s is my bookputs(pres1); //从右往左查找's',此时结果为:s my bookint index = pres - words;int index1 = pres1 - words;printf("index:%d\n", index); //找到's'在字符串数组中的下标printf("index1:%d\n", index); return 0;}
4.strcat
----------字符串的拼接 -----------
例如: strcat("1","2")字符串“2”拼接到字符串“1”的后面
#include#includeint main(){//strcat 字符串的拼接 //strcat("1","2")字符串“2”拼接到字符串“1”的后面char dest1[20] = "I'm a"; //提前算好拼接后的字符串的长度或者干脆直接将字符数组长度设置的大一点strcat(dest1, " teacher");puts(dest1);//此时拼接后,dest1 为I'm a teacherstrncat(dest1, " teacher", 4);//将“ teacher"的前4个字符拼接到dest1上去,注意此时dest1 为I'm a teacherputs(dest1); return 0;}
5.strlen
-------------获取字符数组长度(不包括'\0')-----------
#include#includeint main() {//strlen -----求字符串长度 int len=strlen("hello world!"); //12字节长度,'\0'不算在其中printf("%d\n",len); return 0;}
6.memcmp
---------内存比较----------与strcmp很相似,可以返回值也是一样的
例如:int age1[6] = { 1,3,5,2,4,7 };
int age2[6] = { 1,3,7,2,4,7 }; int res = memcmp(age1, age2, sizeof(int) * 6);
printf("%d\n", res);
7.memcpy
---------内存拷贝---------可以参考strcpy
8memset
--------给一块内存,按字节设定指定的值-------
例如:char name[10] = "";
memset(name, '6', sizeof(char) * 9); //因'\0'占一个位置,所以*9
puts(name);
9.自己设置一个程序比较2个数组是否一致
#define _CRT_SECURE_NO_WARNINGS#include#include#includeint main() {int age1[6] = { 1,3,5,2,4,7 };int age2[6] = { 1,3,7,2,4,7 };if (age1 == age2) {printf("1.age1==age2\n");}bool flag = true;for (int i = 0; i age2[i]) {flag = false;printf("2.age1>age2\n");break;}else if (age1[i] < age2[i]) {flag = false;printf("2.age1<age2\n");break;}}if (flag) {printf("2.age1==age2\n");} while (1){}return 0;}