第四十五天学习记录:C语言进阶:字符串函数使用和剖析Ⅱ

strstr

char* strstr(const char* string,const char* strCharSet);

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <assert.h>

char* my_strstr(const char* str1, const char* str2)
{
	assert(str1&&str2);
	char* s1, *s2;
	char* cur = (char*)str1;
	if (!*str2)
	{
		return (char*)str1;
	}
	while (*cur)
	{
		s1 = cur;
		s2 = (char*)str2;
		while ((*s1)&&(*s2)&&(*s1==*s2))
		{
			s1++;
			s2++;
		}
		if (!*s2)
		{
			return cur;
		}
		cur++;
	}
	return NULL;
}

int main()
{
	char* p1 = "abbbcdef";
	char* p2 = "bbc";
	char* ret = my_strstr(p1, p2);
	if (ret == NULL)
	{
		printf("子串不存在");
	}
	else
	{
		printf("%s\n", ret);
	}
	return 0;
}

官方库函数的写法:
在这里插入图片描述

strtok

char* strtok(char* str,const char* sep);
#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <string.h>

int main()
{
	//192.168.0.1
	char arr[] = "192.168.32.33";
	char* p = ".";
	char buf[1024] = { 0 };
	strcpy(buf, arr);
	char* ret = NULL;
	for (ret = strtok(arr, p); ret != NULL; ret = strtok(NULL, p))
	{
		printf("%s\n", ret);
	}
	return 0;
}

strerror

char* strerror(int errnum);
#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <string.h>
#include <errno.h>

int main()
{
	//errno是一个全局的错误码的变量
	//当C语言的库函数在执行过程中发生了错误,就会把对应的错误码赋值到errno中
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		char* str = strerror(errno);
		printf("%s\n", str);
	}
	else
	{
		printf("open file success\n");
	}
	//char* str = strerror(errno);
	//printf("%s\n", str);
	return 0;
}

问:errno 错误码表
ChatAI答:
errno 是一个错误码的全局变量,用于表示最近发生的错误代码。errno 是一个整数,可被系统内核或 C 库函数设置和修改。

以下是一些常见的 errno 错误码及其描述:

错误码描述
EACCES权限不足
EBADF无效的文件描述符
EFAULT指针指向区域无法访问
EINTR被系统调用中断
EINVAL无效的参数
EIOI/O 错误
EISDIR设备是一个目录
ENOENT无此文件或目录
ENOMEM没有足够的内存
ENOSPC没有足够的空间

此外,不同的系统可能会定义其他自定义错误码。您可以通过 perror 函数将上一个系统调用的错误信息输出到标准错误流中,并在错误信息前加上自定义的字符串以提供更多的上下文信息。

例如,当 open 函数因权限不足而失败时,errno 被设置为 EACCES

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>

void handleError() {
    perror("open");
    exit(EXIT_FAILURE);
}

int main() {
    int fd = open("file.txt", O_RDONLY);
    if (fd == -1) {
        handleError();
    }
    return 0;
}

字符分类函数

函数如果他的参数符合下列条件就返回真
iscntrl任何控制字符
isspace空白字符:空格‘ ’,换页‘\f’,换行’\n’,回车‘\r’,制表符’\t’或者垂直制表符’\v’
isdigit十进制数字 0~9
isxdigit十六进制数字,包括所有十进制数字,小写字母a~f,大写字母A ~ F
islower小写字母a~z
isupper大写字母A~Z
isalpha字母a~z或A ~ Z
isalnum字母或者数字,a ~ z,A ~ Z,0 ~ 9
ispunct标点符号,任何不属于数字或者字母的图形字符(可打印)
isgraph任何图形字符
isprint任何可打印字符,包括图形字符和空白字符

字符转换

int tolower ( int c );
int toupper ( int c );

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <ctype.h>

int main()
{
	char arr[] = "I Am A Killer!";
	int i = 0;
	while (arr[i])
	{
		if (isupper(arr[i]))
		{
			arr[i] = tolower(arr[i]);
		}
		i++;
	}
	printf("%s\n", arr);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值