前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >第二节— —字符函数和字符串函数(没有废话,全是干货)

第二节— —字符函数和字符串函数(没有废话,全是干货)

作者头像
egoist祈
发布2025-01-23 13:13:44
发布2025-01-23 13:13:44
9400
代码可运行
举报
文章被收录于专栏:egoistegoist
运行总次数:0
代码可运行

1.strstr的使用和模拟实现

1.1strstr的使用

各种函数使用介绍 - ->C语言库函数

1. 函数返回字符串str2在字符串str1中第⼀次出现的位置 2. 字符串的比较匹配不包含 \0 字符,以 \0 作为结束标志

简而言之,即是在字符串str1中寻找是否有与字符串str2相同的字符串,如果有:则返回从字符串str1中首次出现相同字符串的位置,没有:则返回NULL。

代码语言:javascript
代码运行次数:0
复制
#include<stdio.h>
#include<string.h>

int main()
{
	char arr1[] = "abcdefghi";
	char arr2[] = "def";
	char* ret = strstr(arr1, arr2);
	if (ret == NULL)
		printf("找不到\n");
	else
		printf("找到了:%s\n", ret);
	return 0;
}

通过strstr函数,遍历字符串arr1,在arr1中寻找是否存在字符串arr2,当arr1走到‘d’的位置时,开始记录此位置,接着继续往下走,看是否与arr2中的第二个字符相匹配,如果是则循环下去,如果不是则不记录此位置,继续往下走。

改下字符串arr1中的字符呢?

代码语言:javascript
代码运行次数:0
复制
#include<stdio.h>
#include<string.h>

int main()
{
	char arr1[] = "abefghi";
	char arr2[] = "def";
	char* ret = strstr(arr1, arr2);
	if (ret == NULL)
		printf("找不到\n");
	else
		printf("找到了:%s\n", ret);
	return 0;
}

1.2strstr的模拟实现

通过strstr函数的使用,我们对此函数有了大概的了解,自己是否能手动实现strstr函数呢? 存在情况: 1. 一次就能匹配成功 2. 需要多次才能匹配成功 3. 找不到

代码语言:javascript
代码运行次数:0
复制
#include<assert.h>
#include<stdio.h>

char* my_strstr(const char* str1, const char* str2)
{
	assert(str1 && str2);
	const char* s1 = str1;
	const char* s2 = str2;
	const char* count = str1;
	if (*str2 == '0')
		return str1;
	while (*count)
	{
		s1 = count;
		s2 = str2;
		while (*s1 == *s2 && *s1 && *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
			return count;
		count++;
	}
	return NULL;
}

int main()
{
	char arr1[] = "abcdefghi";
	char arr2[] = "def";
	const char* ret = my_strstr(arr1, arr2);
	if (ret == NULL)
		printf("找不到\n");
	else
		printf("找到了%s\n", ret);
	return 0;
}

2.strtok的使用

1. sep参数指向一个字符串,定义了用作分隔符的字符集合。

2. 第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。

3. strtok函数找到str中的下⼀个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注: strtok函数会改变被操作的字符串,所以被strtok函数切分的字符串⼀般都是临时拷贝的内容并且可修改。)

4. strtok函数的第⼀个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。

5. strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。

6. 如果字符串中不存在更多的标记,则返回 NULL 指针。

代码语言:javascript
代码运行次数:0
复制
//strtok函数的第一个参数不为(NULL函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
//strtok函数的第一个参数为NULL,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
#include<stdio.h>
#include<string.h>

int main()
{
	char arr1[] = "egoist@2023.com";
	char sep[] = "@.";
	char buf[30] = { 0 };
	strcpy(buf, arr1);

	char* p = NULL;
	for (p = strtok(buf, sep);p != NULL;p = strtok(NULL, sep))
	{
		printf("%s\n", p);
	}
	return 0;
}

3.strerror的使用

strerror 函数可以把参数部分错误码对应的错误信息的字符串地址返回来,即能够返回报错原因。

了解:在不同的系统和C语言标准库的实现中都规定了一些错误码,一般是放在 errno.h 这个头文件中说明 的,C语言程序启动的时候就会使用一个全局的变量errno记录程序的当前错误码,只不过程序启动 的时候errno是0,表示没有错误,当我们在使用标准库中的函数的时候发生了某种错误,就会将对应 的错误码,存放在errno中,而一个错误码的数字是整数很难理解是什么意思,所以每⼀个错误码都是 有对应的错误信息的。strerror函数就可以将错误对应的错误信息字符串的地址返回。

perror函数

可以发现perror函数不仅完成strerror函数的信息报错,并且能将前面的printf中的信息一并处理,自动加上了: 即perror = strerror + printf。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.strstr的使用和模拟实现
    • 1.1strstr的使用
    • 1.2strstr的模拟实现
  • 2.strtok的使用
  • 3.strerror的使用
    • perror函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档