本篇文章介绍了C语言中常用的字符串处理函数,包括字符串查找函数 strstr 和字符串分割函数 strtok,以及错误信息报告函数 strerror。本章将详细说明每个函数的用法、参数和返回值,以及演示了如何使用它们。
函数原型:
const char* strstr ( const char* str1, const char* str2 );
strstr 是C语言中一个用于字符串处理的函数,该函数用于在一个字符串中查找另一个字符串的第一次出现位置。strstr 函数在 str1 字符串中搜索 str2 字符串,并返回第一次找到 str2 的位置(指向 str1 中的字符指针)。如果没找到 str2,则返回 NULL。
以下代码,展示了如何使用 strstr 函数来查找字符串:
#include
#include
int main()
{
const char* str1 = "abcdef";
const char* str2 = "def";
const char* res = strstr(str1, str2);
if (res != NULL)
{
printf("%s\n", res);
}
else
{
printf("在 %s 中未找到 %s\n", str1, str2);
}
return 0;
}
在上面代码中,strstr 函数查找字符串 “def” 在 “abcdef” 中的位置,并输出找到的位置。如果未找到,则输出未找到的消息。
实现思路:
#include
#include
const char* my_strstr(const char* str1, const char* str2)
{
assert(str1 && str2);
const char* s1 = str1;//使用s1遍历str1
const char* sp = str1;//记录str1中每次开始匹配的位置
const char* s2 = str2;使用s2遍历str2
//使用一个循环遍历 str1 字符串,直到遍历到字符串的 \0 位置
while (*s1)
{
//比较 s1 和 s2 指向的字符,如果它们相等,则继续比较下一个字符
while (*s1 && *s1 == *s2)
{
s1++;
s2++;
}
//s2 指针成功地遍历完 str2 字符串,表示找到了匹配的子字符串,返回 sp 指针
if (*s2 == '\0')
{
return sp;
}
//匹配失败,将 sp 指针向前移动一个位置,继续下一轮的比较
sp++;
s1 = sp;
s2 = str2;
}
return NULL;
}
int main()
{
const char* str1 = "abc";
const char* str2 = "abcdef";
const char* res = my_strstr(str1, str2);
if (res != NULL)
{
printf("%s\n", res);
}
else
{
printf("在 %s 中未找到 %s\n", str1, str2);
}
return 0;
}
函数原型:
char* strtok ( char* str, const char* delimiters );
strtok 是C语言中一个用于字符串处理的函数,该函数根据指定的分隔符字符将字符串分割成多个子字符串。
strtok工作方式:
需要注意的是:
strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容
并且可修改。
以下两种方法,分别展示了如何使用 strtok 函数将一个字符串分割成多个子字符串:
#include
#include
int main() {
char str[] = "[email protected]";
const char set[] = "@.";
// 第一次调用后续调用传str,后续调用传入 NULL
for (char* _str = strtok(str, set); _str != NULL; _str = strtok(NULL, set))
{
printf("子字符串:%s\n", _str);
}
return 0;
}
int main() {
char str[] = "[email protected]";//待切割字符串
const char set[] = "@."; //切割字符集合
char* _str = strtok(str, s); // 第一次调用
while (_str != NULL)
{
printf("子字符串:%s\n", _str);
_str = strtok(NULL, s); // 后续调用,传入 NULL
}
return 0;
}
在上面代码中,strtok 函数被用来根据 . 和 @ 分割字符串 “[email protected]”,并将每个子字符串打印出来。strtok 函数在每次调用时都会返回下一个子字符串的指针,直到没有更多子字符串可分割。
运行结果:
函数原型:
char* strerror ( int errnum );
strerror 是C语言中错误信息报告函数,该函数会根据 errnum 参数返回对应的错误信息字符串。
以下代码,展示了如何使用 strerror 函数来获取错误信息:
#include
#include
#include
int main() {
FILE *file = fopen("data.txt", "r");
if (file == NULL)
{
int errnum = errno; // 获取当前的错误码
printf("错误码:%d\n错误信息:%s\n", errnum, strerror(errnum)); // 获取错误信息字符串
}
else
{
// 成功打开文件的操作
fclose(file);
}
return 0;
}
在上面代码中,我们试图打开一个不存在的文件,因此 fopen 函数会返回 NULL,并且设置了错误码 errno。然后,我们使用 strerror 函数根据错误码获取相应的错误信息字符串,并打印出了错误消息。
void perror(const char *s);
#include
#include
#include
int main() {
FILE *file = fopen("data.txt", "r");
if (file == NULL)
{
perror("打开失败");//用户自定义错误信息前缀。
}
else
{
// 成功打开文件的操作
fclose(file);
}
return 0;
}
在上面代码中,我们试图打开一个不存在的文件,因此 fopen 函数返回 NULL 并设置了错误码 errno,该函数默认使用errno 中的错误码来查找相应的错误信息。然后,我们使用 perror 函数打印错误消息,前缀为 “打开失败”,以便清晰地指示是由于文件打开失败引发的错误。
运行结果:
至此,本片文章就结束了,若本篇内容对您有所帮助,请三连点赞,关注,收藏支持下。
创作不易,白嫖不好,各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
如果本篇博客有任何错误,请批评指教,不胜感激 !