❤️订阅专栏:字符串函数
续上第二篇,我们接下来继续介绍几种字符串函数,想要熟练的运用字符串函数,对函数的一些实现细节的了解是必不可少的。除此之外,跟应该多加练习,敲起来!
char * strtok ( char * str, const char * delimiters );
字符串切割函数
delimiters
参数是一个字符串,定义了用作分割符的字符集合。delimiters
字符串中一个或者多个分割符分割的标记。strtok
函数找到str
中的下一个标记,并将其用\0
结尾,返回一个指向这个标记的指针。(strtok
函数会改变被操作的字符串,所以在使用strtok
函数切分的字符串一般都是临时拷贝的内容并且可以修改)strtok
函数的第一个参数不为NULL
,函数将找到str
中第一个标记,strtok
函数将保存他在字符串中的位置。strtok
函数的第一个参数为NULL
,函数将在同一个字符串中被保存的位置开始,查找下一个标记。NULL
指针。strtok
函数和其他字符串函数相比较来说非常特殊,具体的我们用一段代码来分析,如下代码。
#include
#include
int main()
{
char arr[] = "www.baidu@qq123456789";
char arr2[50] = { 0 };
strcpy(arr2, arr);
const char* p = ".@";
char* ret = NULL;
ret = strtok(arr2, p);
printf("%s\n", ret);
ret = strtok(NULL, p);
printf("%s\n", ret);
ret = strtok(NULL, p);
printf("%s\n", ret);
return 0;
}
我们arr数组就是一段字符串数组,我们的p
则是指向一段分割符的集合。strtok
函数对字符串进行切割就是利用分割符对字符串进行切分,并将分割符修改为\0
,然后返回标记的地址。所以我们说在使用strtok
函数切分的字符串一般都是临时拷贝的内容并且可以修改。我们来观察运行的结果,如下图。
我们之所以说strtok
这个函数特殊,就是因为如果我们要对一段字符串进行切分的话,我们只需要在第一次调用的时候把字符串传给它,在后面的调用就只需要传NULL
给它就行了,该函数具有记忆功能,会在后来的调用自动在上一次的调用的后面继续向后进行,在遇到分割符时,会将分割符再次修改为\0
,然后返回这一段的标记地址。我们还可以通过监视窗口观察strtok
函数将分割符修改的情况以及返回标记地址的情况,如下图。
我们可以观察到分割符.
和@
被修改为\0
,并且依次返回每一段标记的的首地址。在理解了strtok
函数的机制之后,我们可以把代码写的更加简介一点,如下代码。
#include
#include
int main()
{
char arr[] = "www.baidu@qq123456789";
char arr2[50] = { 0 };
strcpy(arr2, arr);
const char* p = ".@";
char* ret = NULL;
for (ret = strtok(arr2, p); ret != NULL;ret = strtok(NULL, p))
{
printf("%s\n", ret);
}
return 0;
}
#include
#include
char* my_strtok(char* arr, const char* p)
{
static char* val = NULL;
if (arr != NULL)
{
val = arr;
}
else
{
val++;
arr = val;
}
if (*val == '\0')
{
return NULL;
}
else
{
while (*val != '\0')
{
for (int i = 0; *(p + i) != '\0'; i++)
{
if (*val == *(p + i))
{
*val = '\0';
return arr;
}
}
val++;
}
return arr;
}
}
int main()
{
char arr[] = "www.baidu@qq123456789";
char arr2[50] = { 0 };
strcpy(arr2, arr);
const char* p = ".@";
char* ret = NULL;
for (ret = my_strtok(arr2, p); ret != NULL; ret = my_strtok(NULL, p))
{
printf("%s\n", ret);
}
return 0;
}
char * strerror ( int errnum );
错误打印函数
erenum
是错误码,在传给strerror
函数一个错误码后,函数会返回一个地址,根据地址可以打印错误信息。strerror
函数可以利用错误码转换成错误信息,具体转换我们用代码进行观察,如下代码。
#include
#include
int main()
{
printf("%s\n", strerror(0));
printf("%s\n", strerror(1));
printf("%s\n", strerror(2));
printf("%s\n", strerror(3));
printf("%s\n", strerror(4));
printf("%s\n", strerror(5));
return 0;
}
错误信息打印如下图。
我们可以看到,每个错误码都对应着不同的错误信息,我们在程序的设计中,合理的运用strerror
函数可以帮助我们更快的找到错误的出处。
本章介绍了两个字符串函数strtok
函数和strerror
函数,strtok
函数的使用需要注意它的一些特别之处,strerror
函数是根据错误码打印错误信息,可以帮助我们快速的找出程序的错误,我们在这就不对strerror
函数进行模拟实现。字符串函数的介绍在这里也就告一段落了,希望大家多多支持,如有错误之处还望指正。