C语言进阶——字符及字符串函数

目录

一、字符函数

1.1字符分类函数

1.2字符转换函数

二、字符串函数

2.1 strlen

2.2 strcpy

2.3 strcat

2.4 strcmp

2.5 strncpy

2.6 strncat

2.7 strncmp

2.8 strstr

2.9 strtok

三、字符串函数的模拟实现


一、字符函数

        字符函数的头文件为<ctype.h>

        详见C语言官方解释<cctype> (ctype.h) - C++ Reference (cplusplus.com)

1.1字符分类函数

函数判断类型(若为真则返回正数,假则返回0)
iscntrl控制字符
isscape空格,换页\f,换行\n,回车\r,制表符\t
isdigit十进制数字 0~9
isxdigit十六进制数字,包含十进制字符,小写字母a~f,大写字母A~F
islower所有小写字母
isupper所有大写字母
isalpha所有字母
isalnum所有字母和数字
ispunct所有标点符号
isgraph所有图形字符

1.2字符转换函数

函数作用
tolower⼤写字⺟转⼩写
toupper⼩写字⺟转⼤写

二、字符串函数

        字符串函数的头文件为<string.h>

        详见C语言官方解释<cstring> (string.h) - C++ Reference (cplusplus.com)

2.1 strlen

size_t strlen ( const char * str );
  • 功能:求字符串长度
  • 注意事项:
  1. 字符串必须以‘\0’结尾。
  2. 返回值为size_t类型,无法做加减法。

2.2 strcpy

char* strcpy(char * dest, const char * source );
  • 功能:拷贝一个数组覆盖原先数组
  • 注意事项:
  1. 目标空间必须足够大。
  2. 拷贝的数组必须要以‘\0’结尾。

2.3 strcat

char * strcat ( char * dest, const char * source);
  • 功能:用来连接两个字符串。
  • 注意事项:
  1. 两个字符串必须要以‘\0’结尾。
  2. 一个数组的空间必须足够大。

2.4 strcmp

int strcmp ( const char * str1, const char * str2 );
  • 功能:用来比较两个字符串。
  • 返回值:大于-返回正数;小于-返回负数;等于-返回0

2.5 strncpy

char * strncpy ( char * dest, const char * source, size_t num );
  • 功能:用来拷贝指定长度的字符(长度不够末尾末尾补‘\0’)。
  • 注意事项:拷贝结束后函数会自动在结尾补‘\0’。

2.6 strncat

char * strncat ( char * dest, const char * source, size_t num );
  • 功能:用来把一个指定长度的字符连接到另一个字符串后面。
  • 注意事项:
  1. 如果长度不够,函数自动忽略不够的字符数。
  2. 拷贝结束后函数会自动在结尾补‘\0’。

2.7 strncmp

int strncmp ( const char * str1, const char * str2, size_t num );
  • 功能:用来比较指定长度的字符串。
  • 返回值:大于-返回正数;小于-返回负数;等于-返回0。

2.8 strstr

char * strstr ( const char * str1, const char * str2);
  • 功能:用来查找在str1中是否存在str2。
  • 返回值:有-返回str2在str1中第一次出现的首元素地址;无-返回空指针。

2.9 strtok

char * strtok ( char * str, const char * sep);
  • 功能:用来切割字符串,将已定义的分隔符改为‘\0’。
  • 说明:使用时需自己定义分隔符数组sep,并传参给函数
  • 返回值:没有找到分隔符-返回空指针
  • 注意事项:
  1. 该函数会改变原数组,建议拷贝一份原数组再进行操作。
  2. 若存在多个字符需要修改:第一次修改需要传递字符串数组的地址,下一次修改需要传给空指针(函数本身自动保存上一次修改后的地址)。
  • 使用范例:
#include<stdio.h>
#include<string.h>

int main()
{
	char string[] = "192.168.4.1";
	char* sep = ".";
	char* str = NULL;
	for (str = strtok(string, sep); str != NULL; str = strtok(NULL, sep))
	{
		printf("%s\n", str);
	}
	return 0;
	printf("%s", string);
}

三、字符串函数的模拟实现

3.1strlen

//计数器⽅式
int my_strlen(const char * str)
{
 int cnt = 0;
 while(*str)
 {
     cnt++;
     str++;
 }
 return cnt;
}

//指针-指针的⽅式
int my_strlen(char *s)
{
     char *p = s;
     while(*p != ‘\0’ )
     p++;
     return p-s;
}

3.2strcpy

void my_strcpy(char* dest, char* source)
{
	int i = 0;
	while (*(source + i) != '\0')
	{
		*(dest + i) = *(source + i);
		i++;
	}
}

3.3strcat

char* my_strcat(char* dest, const char* source)
{
	char* ret = dest;
	while (*dest != '\0')
	{
		dest++;
	}
	while (*dest++ = *source++)
	{
		;
	}
	return ret;
}

3.4strcmp

int my_strcmp(char* str1, char* str2)
{
	while (*str1 == *str2)
	{
		if (*str1 == 0 && *str2 == 0)
		{
			return 0;
			break;
		}
		str1++;
		str2++;
	}
	return *str1 - *str2;
}

3.5strstr

char* my_strstr(char* source, char* aim)
{
	char* p1 = NULL;
	char* p2 = NULL;
	char* curp = source;
	while (*curp)
	{
		p1 = curp;
		p2 = aim;
		while (*p1 == *p2 && *p2 != '\0')
		{
			p1++;
			p2++;
		}
		if (*p2 == '\0')
		{
			return curp;
		}
		curp++;
		
	}
	return NULL;
}

3.6strncpy

void my_strncpy(char* dest, char* source, int num)
{
	int i = 0;
	while (num--)
	{
		*(dest+i) = *(source+i);
		i++;
	}
}

3.7strncat

void my_strncat(char* dest, char* source, int num)
{
	int i = 0;
	while (*source != '\0')
	{
		source++;
	}
	while (num--)
	{
		*(source + i) = *(dest + i);
		i++;
	}
}

  • 27
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值