1.strlen
(1)是什么
strlen函数是计算字符串中'\0'前面出现的字符个数,需要注意以下几点:
1)strlen函数返回的是在字符串中'\0'前面出现的字符个数(不包 含'\0')
2)参数指向的字符串必须要以 '\0' 结束。
3)注意函数的返回值为size_t,是无符号的
对于第三点例如:strlen("abc")-strlen("abcdef") 那么得到的结果并不是-2,而是一个相当大的正数。
(2)怎么用
1)头文件引用#include<string.h>
2)参数是所求字符串长度的起始地址
(3)如何实现
有多种方法可以实现,以下是通过计数器的方法实现。
int my_strlen(char* arr)
{
int count = 0;
while (*arr != '\0')
{
count++;
arr = arr + 1;
}
return count;
}
int main()
{
char arr[] = "abcdef";
int ret = my_strlen(arr);
printf("%d\n", ret);
return 0;
}
2.strcpy
(1)是什么
将源指向的C字符串复制到目标指向的数组中,包括终止字符‘\0’,并在该点停止,需要注意以下几点:
1)源字符串必须以 '\0' 结束。
2)会将源字符串中的 '\0' 拷贝到目标空间。
3)目标空间必须足够大,以确保能存放源字符串。
4)目标空间必须可变。
对于第四点,例如:
char* str = "*************";
char* p = "hello";
strcpy(str, p);
这样就不可以,因为str所给的是一个常量字符串,是不能改动的,因此便会出现报错
(2)怎么用
1)头文件引用#include<string.h>
2)第一个参数是目标字符串的所要被复制部分的起始地址,第二个参数是要用来复制的字符串的起始地址。
(3)如何实现
void my_strcpy(char* str1, char* str2)
{
while (*str2 != '\0')
{
*str1 = *str2;
str1++;
str2++;
}
*str1 = *str2;
}
int main()
{
char arr1[10] = "abcdef";
char arr2[] = "ghc";
my_strcpy(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
3.strcat
(1)是什么
将源指向的字符串追加到目标指向的数组中,包括终止字符,需要注意以下几点:
1)源字符串必须以 '\0' 结束。
2)目标空间必须有足够的大,能容纳下源字符串的内容。
3)会将源字符串中的 '\0' 拷贝到目标空间。
4)目标空间必须可变。
5)目标空间所追加的起点是'\0'
对于3)5)可以通过以下例子了解,
例:char arr1[20] = {"abcde \0********"};char arr2[] = "fgh";
结果是
(2)怎么用
1)头文件引用#include<string.h>
2)第一个参数是目标字符串的起始地址,第二个参数是要用来追加的字符串的起始地址。
(3)如何实现
char *my_strcat(char* dest, const char* src)
{
char* ret = dest;
while (*dest != '\0')
{
dest++;
}
while ((*dest = *src)!='\0')
{
dest++;
src++;
}
return ret;
}
int main()
{
char arr1[20] = {"abcde \0*********"};
char arr2[] = "fgh";
my_strcat(arr1, arr2);
return 0;
}
4.strcmp
(1)是什么
比较两个字符串,最开始是比较两个字符串中的第一个字符,如果它们彼此相等,则继续继续下面字符的比较,直到字符不同或达到终止的空字符。需要注意:
1)第一个字符串大于第二个字符串,则返回大于0的数字
2)第一个字符串等于第二个字符串,则返回0
3)第一个字符串小于第二个字符串,则返回小于0的数字
(2)怎么用
1)头文件引用#include<string.h>
2)第一个参数是第一个字符串的起始地址,第二个参数是第二个字符串的起始地址。
(3)如何实现
int my_strcmp(const char* p,const char* q)
{
while (*p == *q)
{
if (*p == '\0')
{
return 0;
}
p++;
q++;
}
return*p - *q;
}
int main()
{
const char* p = "aabbcd";
const char* q = "aaabcd";
int ret = my_strcmp(p, q);
if (ret > 0)
{
printf("p>q");
}
else if (ret < 0)
{
printf("p<q");
}
else
printf("p=q");
return 0;
}
5.strncpy
(1)是什么
拷贝num个字符从源字符串到目标空间。
(2)怎么用
1.
2.
3.
6.strncat
(1)是什么
将源字符串的前 num 个字符附加到目标字符串当中 ,外加一个终止字符'\0',如果源字符串的 lenoth小于 num,则仅复制终止字符之前的内容。
(2)怎么用
需要注意以下几点:
1)目标空间所追加的起点是'\0'
2)会追加'\0' 到目标空间(即使在num小于源字符串lenth的情况下)。
3)即使num大于源字符串长度,在目标字符串当中也不会过多追加'\0'
1.
2.
7.strncmp
(1)是什么
比较字符串 str1 的字符数与字符串 str2 的字符数。此函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续处理,直到字符不同,直至终止字符,或者到两个字符串中的 num个字符比较结束,以先发生者为准。
(2)怎么用
需要注意,只要在第n个字符之前有相对应的字符比较出来了大小,那么大小便以比较出来,无关后面相对应字符的大小。
1.
2.
8.strstr
(1)是什么
返回指向 str1 中第一次出现的 str2 的地址,如果 str2 不是 str1 的一部分,则返回 null 指针。匹配过程不包括终止 null 字符,但会在此处停止。
(2)怎么用
1.找到就返回第一次出现的起始地址
2.找不到就返回空指针
int main()
{
char str[20] = "aaabbbccc";
char p[] = "bcc";
char* a = strstr(str, p);
printf("%s\n", a);//bccc
return 0;
}
(3)如何实现
char* my_strstr(char* str1, char* str2)
{
char* cp = str1;
char* s = str2;
while (*str1 != *str2)
{
str1++;
cp++;
}
while (*str1 == *str2)
{
str1++;
str2++;
while (*str1 && *str2 && *str1 != *str2)
{
str2 = s;
cp++;
str1 = cp;
}
if (*str2 == '\0')
{
return cp;
}
}
return NULL;
}
int main()
{
char str[10] = "aaabbbccc";
char p[] = "abb";
char* a = my_strstr(str, p);
printf("%s\n", a);
return 0;
}
9.strtok
(1)是什么
char * strtok ( char * str, const char * sep );
sep参数是个字符串,定义了用作分隔符的字符集合,第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。
strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注: strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容 并且可修改。)
strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串 中的位置。
strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标 记。
如果字符串中不存在更多的标记,则返回 NULL 指针。
(2)怎么用
int main()
{
const char* p = "hangzhou@yayun.com";
char arr1[30];
char arr2[] ="@.";
strcpy(arr1, p);
//char* s = strtok(arr1, arr2);
//printf(" %s\n", s);
//s = strtok(NULL, arr2);
//printf(" %s\n", s);
//s = strtok(NULL, arr2);
//printf(" %s\n", s);
for (char* s = strtok(arr1, arr2); s != NULL; s = strtok(NULL, arr2))
{
printf("%s\n", s);
}
return 0;
}
10.strerror
(1)是什么
返回错误码,所对应的错误信息。