一.c语言中字符串处理的头文件为<string.h>
1.strlen()计算字符串长度
size_t strlen(const char *str)
可以看出strlen()函数的返回值是size_t类型,其中size_t是typedef定义的无符号整数类型。
而这函数的参数为字符串的首地址。
我们来简单的实现一下这个函数的过程
size_t my_strlen(const char* arr)
{
char* p = arr;
while (*p++)
;
return p - arr-1;
}
2.strcmp()字符串比较函数
int strcmp(const char *str1, const char *str2)
函数的参数为str1和str2的首地址,并将字符串逐个字符比较,若str1>str2则返回1,若str2<str2则返回-1,若str1与str2相同则返回0;
strncmp()可以比较前n个字符
int strncmp(const char *str1, const char *str2, size_t n)
3.strcpy()字符串拷贝函数
char *strcpy(char *dest, const char *src)
将字符串src中的内容拷贝到dest数组中;但这个函数有一个弊端就是不会检测数组越界,也就是说如果dest数组的大小小于src数组那么就会出错。
strncpy()拷贝前n个字符
char *strncpy(char *dest, const char *src, size_t n)
4.strcat()字符串拼接函数
char *strcat(char *dest, const char *src)
因为c语言中字符串必须是以"\0"结束,所以将src拼接到dest的结尾,只需要将src的首位接到dest的"\0"位置就完成了拼接,但是这个函数还是不会检测数组越界,也就是说如果dest数组不够大装不下src数组包括src的"\0",那么就会出错。
我们来简单的实现一下这个操作
char* my_strcat(char* dest, const char* src)
{
char* p = dest;
while (*p)
{
p++;
}
while (*p++ = *src++)
;
return dest;
}
strncat()拷贝src的前n个字符
char *strncpy(char *dest, const char *src, size_t n)
5.strchr()在字符串中查找某字符
char *strchr(const char *str, int c)
在字符串str中查找字符c,如果在字符串 str 中找到字符 c,则函数返回指向该字符的指针,如果未找到该字符则返回 NULL。
二.字符串数组
1.c语言中的字符串
因为c语言中没有专门的字符串类型,所以字符串只能依赖于字符数组存在。
因此一个字符串一般定义为
char arr[11]="HelloWorld";
然后字符串是默认在结尾加入"\0",因为字符串打印到"\0"时才结束。所以在处理字符数组时一定要检测是否越界。
2.c语言中的字符串数组
如何存取多个字符串,C语言中有两种方法,一是利用二维数组的方式来存取,二是通过指针数组
2.1 利用二维数组的方式来存取多个字符串
char arr[][10]={"hello","world"};
但是对于二维数组来存取字符串有一个弊端就是要固定好字符串的长度,如果有的字符串很长有点字符串很短就会造成资源浪费。并且通过二维数组来存取的字符串是在一个连续的地址空间。
2.2通过指针数组来存取多个字符串
char* arr[]={"hello","world"};
指针数组存地址,通过指针数组将每个字符串的地址存入数组中。通过这种方法可以解决二维数组的地址浪费。