📌求字符串长度
⭐️⭐️1. strlen
🌿语法:
size_t strlen ( const char * str )
🌿用处:strlen是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值。
🌿注意事项:
strlen计算字符串str的(unsigned int型)长度,不包括’\0’在内
🌿举例:
##include <stdio.h> #include <string.h> int main(void){ char str [50] = "HelloWorld'\0'Hi";//定义字符数组str容量:50 int len = strlen(str);//定义整数类型int len,然后把strlen(str)计算出来的长度赋值给len printf("len的长度:%d\n",len); return 0; }
🌿输出结果:
len的长度:11//计算长度"HelloWorld"+'共11个,不包括\0'
🌿实现自己的mystrlen
int mystrlen(char c[]) { int i = 0; while (c[i]) //c[i]!=NULL { i++; } return i; } int main() { char c[20] = "abcdef"; int t = mystrlen(c); printf("%d", t); return 0; }//🌿🌿🌿输出结果:6
📌长度不受限制的字符串函数
⭐️⭐️2. strcpy
🌿语法:
char * strcpy ( char * destination, const char * source )
🌿用处:把 source
所指向的字符串复制到destination
🌿注意事项:
- 源字符串必须以 ‘\0’ 结束。
- 会将源字符串中的 ‘\0’ 拷贝到目标空间。
- 目标空间必须足够大,以确保能存放源字符串。
- 目标空间必须可变。
🌿举例:
/* strcpy example */ #include <stdio.h> #include <string.h> int main () { char str1[]="Sample string"; char str2[40]; char str3[40]; strcpy (str2,str1); strcpy (str3,"copy successful"); printf ("str1: %s\nstr2: %s\nstr3: %s\n",str1,str2,str3); return 0; }
🌿输出结果:
str1: Sample string str2: Sample string str3: copy successful
🌿实现自己的mystrcpy
void mystrcpy(char to[], char from[]) { int i = 0; while (from[i]) //from[i]!=NULL { to[i] = from[i]; i++; } to[i] = 0; //将数组to[]的最后一个字符的后面加上结束符 } int main() { char to[20] = "abcdef"; char from[20] = "ghijk"; mystrcpy(to, from); printf("%s", to); return 0; }//🌿🌿🌿输出结果:ghijk
⭐️⭐️3. strcat
🌿语法:
char * strcat ( char * destination, const char * source )
🌿用处:将一个字符串source追加到另一个字符串destination的结尾处,构成一个新的字符串
🌿注意事项:
源字符串source必须以 ‘\0’ 结束。
目标空间destination必须有足够的大,能容纳下源字符串的内容。
目标空间destination必须可修改。
🌿举例:
int main() { char dest[30] = { "hello" }; char src[] = {"world"}; strcat(dest, src); printf("%s", dest); return 0; }
输出结果:
helloworld
🌿实现自己的mystrcat
char* my_strcat(char* dest, const char* src) { char* ret = dest; while (*dest)//找到目标函数结尾的‘\0’ { dest++; } while (*dest++ = *src++)//追加到源字符串 { ; } return ret; } int main() { char a1[30] = { "abc" }; char a2[] = { "def" }; my_strcat(a1, a2); printf("%s", a1); return 0; }
⭐️⭐️4. strcmp
🌿语法:
int strcmp ( const char * str1, const char * str2 )//注意!!!这里比较的是字符串的内容而非长度
🌿用处:比较两个字符串的大小
这个库函数有什么用呢?
🌿🌿使用场景:当我们要比较输入的密码是否相等时就可以使用~
🌿标准规定:
从第一个字符开始进行比较,若相同则比较下一个字符:
若第一个字符串大于第二个字符串,则返回大于0的数字
若第一个字符串等于第二个字符串,则返回0
若第一个字符串小于第二个字符串,则返回小于0的数字
🌿举例:
#include <stdio.h> #include <string.h> int main(void) { char *a = "English"; char *b = "ENGLISH"; char *c = "english"; //strcmp()只能比较字符串, 其他形式的参数不能比较 printf("strcmp(a, b):%d\n", strcmp(a, b));//字符串之间的比较 printf("strcmp(a, c):%d\n", strcmp(a, c)); return 0; }
🌿🌿输出结果:
strcmp(a, b):1 strcmp(a, c):-1
🌿实现自己的mystrcmp
int mystrcmp(const char* str1, const char* str2) { while ( *str1 == *str2) { if (*str1 == '\0') return 0; str1++; str2++; } return *str1 - *str2; } int main() { char str1[] = { "hello" }; char str2[] = { "world" }; int t = mystrcmp(str1 , str2); printf("%d", t); return 0; }//🌿🌿🌿输出结果:-15