字符函数与字符串函数

1.字符分类函数

  c语言中提供了许多对字符进行分类的函数,这些函数都需要包含头文件<ctype.h>。

  iscntrl函数:用来判断字符是否为控制控制字符的C语言库函数。

  isspace函数:用于检查是否为空字符例如:空格(' ')、水平定位字符('\t')、归位键('\r')、换行('\n')、垂直定位字符('\v')或翻页('\f')。

  isdigit函数:用来检查字符是否为数字0~9。

  isxdigit函数:用来检查字符是否为十六进制数字,包括所以十进制数字,小写的a~f,大写的A~F。

  islower函数:用来检查字符是否为小写的a~z。

  isupper函数:用来检查字符是否为大写的A~Z。

  isalnum函数:用来检查字符是否为字符或数字。  

  ispunct函数:用来检查字符是否为标点符号或者特殊符号。

  isgraph函数:用来检查字符是否为图形字符。

  isprint函数:用来检查字符是否为可打印的字符。(包括空格)

2.字符转化函数

  tolower函数:将传入的大写字母改为小写字母。

int tolower (int C);

  toupper函数:将传入的小写字母转成大写字母。

int toupper (int c);

3.strlen函数

  strlen函数是用计算字符串长度的函数,每一个字符串后面都有一个‘\0’,strlen函数结束的条件就是遇到‘\0’。strlen函数的返回值是size_t(无符号),头文件是<string.h>。

strlen函数的使用

size_t strlen ( const char * str );

char a[] = "abdcgar";
int ret = strlen(a);
printf("%d", ret);\\输出结果是7

strlen函数模拟

  strlen函数的模拟有三种方法:计数器法,指针法,不创建计算器法。

1.计数器法

size_t count_strlen(const char* a)
{
	int count = 0;
	while (*a != '\0')
	{
		a++;
		count++;
	}
	return count;
}

2.指针法

size_t point_strlen(const char* a)
{
	char* p = a;
	while (*a != '\0')
	{
		a++;
	}
	return a - p;
}

3.不使用计数器

size_t no_count_strlen(const char* a)
{
	if (*a == 0)
		return 0;
	else
		return 1 + no_count_strlen(a+1);
}

4.strcpy函数

  strcpy函数是将源字符串拷贝到目标字符串中,源字符串必须由‘\0’结尾。

strcpy函数的使用

//char *strcpy(char *dest,const char*sour) 返回值是char类型,dest是目标字符串,sour是源字符串
int main()
{
	char a[20] = { 0 };
	char b[] = "suidf";
	strcpy(a, b);
	printf("%s", a);//输出结果是suidf
	return 0;
}

strcpy函数的模拟

char* my_strcpy(char* dest, const char* sour)
{
	char* ret = dest;
	assert(dest != NULL);
	assert(sour != NULL);
	while (*dest++ = *sour++)
	{
		;
	}
	return ret;
}

 5.strcat函数

  strcat函数是给目标字符串结尾追加字符串,源字符串需要有‘\0’,目标字符串也需要有‘\0’,目标字符串的容量足够大并且可修改。

strcat函数的使用

int main()
{
	char a[100] = { "WeCome " };
	char b[] = { "to C language" };
	strcat(a, b);
	printf("%s", a);//输出结果:WeCome to C language
	return 0;
}

 strcat函数的模拟

​
char* my_strcat(char* dest, const char* sour)
{
	char* ret = dest;//存储dest的首地址
	assert(dest != NULL);//断言防止dest,sour为空指针
	aseert(sour != NULL);
	while (*dest)
	{
		dest++;
	}
	while (*dest++ = *sour++)
	{
		;
	}
	return ret;//在c语言函数库中strcat函数需要返回目标函数的首地址
}

​

6.strcmp函数

strcmp函数是用来比较字符串的大小,例如有两字符串str1和str2:

如果str1大于str2就返回一个大于零的值

如果str1小于str2返回一个小于零的值

如果str1等于str2返回零。

strcmp函数实际上是比较的是两字符串的Ascll码值的大小。

strcmp函数的使用

#include<stdio.h>
#include<string.h>
int main()
{
	/*char ch[] = {"sdafadsf"};
	char re[] = {"fasdfasdf"};*/
	char* ch = "adsfsdf";
	char* re = "asdfwr";
	int ret = strcmp(ch, re);
	printf("%d\n", ret);//输出结果:-1
	return 0;
}

strcmp函数的模拟 

int my_strcmp(const char* str1, const char* str2)
{
	assert(str1 != NULL);
	assert(str1 != NULL);
	while (*str1 == *str2)
	{
		if (*str1 != '\0' || *str2!='\0')
		{
			str1++;
			str2++;
		}
	}
	return *str1 - *str2;
}

7.strncpy函数

strncpy函数可以与strcpy函数的比较,strncpy函数是将源字符串的num个字符拷贝到目标字符串,如果源字符串的长度小于num,拷贝完源字符串之后在目标字符串后补\0,直到num个。

int main()
{
	char str1[] = "sdfasd";
	char str2[] = "fad";
	strncpy(str1, str2, 6);
	printf("%s", str1);
	return 0;
}

8.strncat函数

strncat函数的是目标字符串的末尾追加源字符串的前num个字符,如果源字符串的长度小于num,那么就会将源字符串中一直到\0之前的字符拷贝到目标字符串(包括\0)。

strncat函数的使用

int main()
{
	char dest[100] = {"afdsf"};
	char source[] = { "aaaa" };
	strncat(dest, source, 4);
	printf("%s", dest);//输出结果afdsfaaaa
	return 0;
}

9.strncmp函数

strncmp函数的作用是比较str1和str2这个两个字符串的前num个字符的大小,返回值与strcmp的返回值一样。

strncmp函数的使用

int main()
{
	char dest[] = "asdf";
	char source[] = "asde";
	int ret= strncmp(dest, source, 3);
	printf("%d", ret);//比较前三个字符的大小前三个字符相同所以返回值为零
	return 0;
}

10.strstr函数

strstr的作用是在str1字符串中寻找str2字符串,并返回str2在str1中第一次出现的位置的地址,其中字符串寻找的过程中不包括\0,\0作为结束标志。

strstr函数的使用

int main()
{
	char dest[] = "asdf";
	char sour[] = "df";
	char *ch = NULL;
	ch = strstr(dest, sour);
	printf("%s", ch);//因为strstr函数返回的地址所以要用指针变量接收
	return 0;
}

strstr函数的模拟 

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

11.strtok函数

strtok函数的作用是在目标字符串中寻找分割符号,并以分隔符分割字符串找到分割符之后就记录本次的位置,下次再使用的时只需要传空指针即可。

char *strtok(char s[], const char *delim);

strtok函数的使用

int main()
{
	char arr[100] = "www.baidu.com";
	char delim[10] = {'.'};
	char* p = NULL;
	p =strtok(arr, delim);//输出结果是www
	printf("%s\n", p);
	p = strtok(NULL, delim);//输出结果是baidu
	printf("%s\n", p);
	return 0;
}

今天的分享就到这里啦,请大家多多指点!

  • 25
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程菜鸟99号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值