字符函数和字符串函数

字符和字符串

在介绍这两种函数前,我们先回顾下字符和字符串中较为重要的点:

字符:

我们可以通过键盘上每一个按键输入的内容都可以称为字符(包括数字),用单引号括起来。

字符的特点:

字符在内存中都是以其相应的ASCLL值存储的,ASCLL码的内容较多,记住几个特殊的即可。

  • A-->Z: 65-->96
  • a-->z: 97-->129
  • 小写字母和大写字母可以通过+ 、-32来互相转换

字符串:

         由两个及以上的字符组成,用" "括起来。

字符串的特点:字符串默认以\0 结尾。

常用的字符函数:

    使用字符函数要包含头文件<ctype.h>

字符分类函数:

    字符分类函数使用方法基本类似,熟悉一个后其他字符函数的使用问题就不大了,下面以将小写字母转大写字母为例来介绍判断小写函数islower

    

其中,islower函数的格式是    int  islower (int n),括号内接受一个字符(或其对应的ASCLL值),返回一个整形数;

字符转换函数:

    c语言提供了两种字符转换函数,分别是 tolower 和 toupper, 两者功能相对,用法相同,可以一起介绍。

他们的格式如下:

int tolower(int n)//将传入的参数转为小写
int toupper(int n)//将传入的参数转为大写

 以下是将字符串里的字符全部转为小写字母的代码实现

​
#include<stdio.h>
int main
{	int i = 0;
	char arr[50] = "abcADNhEj";
	int sz = sizeof(arr) / sizeof(arr[0]) - 1; //计算字符串的长度
	for (i = 0; i < sz; i++)
	{
		if (isupper(arr[i])) //先判断是否为大小字母,防止tolower函数对小写字母进行转换,影响程序效率
		{
			arr[i] = tolower(arr[i]); //如果是大写字母,将其转为小写
		}
	}
	printf("%s", arr);
	return 0;
}

​

    字符串函数:

    字符串函数是对字符串进行操作的函数,需要包含头文件<string.h>.下面介绍几种常见的字符串函数:

1,strlen函数

size_t strlen(字符串)//传入字符串,并返回字符串的长度

值得注意的是,strlen所计算的长度并不包含末尾的\0,且返回的长度值为无符号整形size_t;

strlen函数的模拟实现


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

size_t my_strlen(const char * arr)//strlen 的实现
{
	int len = 0;
	while (*arr)
	{
		arr++;
		len++;
	}
	return len;
}

int main()
{
int i = 0;
char arr[50] = "abcADNhEj";
my_strlen(arr);  
printf("长度为%d\n", my_strlen(arr, sz));

return 0;
}

  2,strcpy函数:

const * strcpy(char*arr1,char*arr2)//传入arr1和arr2两个字符串,将arr2的内容拷贝到arr1中,
                                   //返回arr1的首地址
strlen的模拟实现

#include<stdio.h>
//strcpy的模拟实现
char* my_strcpy(char* arr, char* str)
{
	char* ret = arr;
	while (*str)
	{
		*arr = *str;
		arr++;
		str++;
	}
	return ret;
}
int main()
{
  int i = 0;
  char arr[50] = "abcADNhEj";
  char* str = "qwert";
  char * a = my_strcpy(arr, str);
  printf("%s", a);

return 0;
}

3,strcat函数

char*strcat(char*arr1,char*str)//函数接收目标字符串arr1和源字符串str的首地址,将str的内容拼接到 
                                 arr1字符串zh
                               //返回arr1字符串的首地址
strcat的模拟实现
#include<stdio.h>
char* my_strcat(char* arr, char* str)
{
	char * p_arr = arr;
	while (*arr)
	{
		arr++;
	}
	while (*str)
	{
		*arr = *str;
		arr++;
		str++;
	}
	return p_arr;
}
int main()
{
   int i = 0;
  char arr[50] = "abcADNhEj";
  char* str = "qwert";
  char * a = my_strcat(arr, str);
  printf("%s", a);
  return 0;
}

4,strcmp函数

int strcmp(char*arr1,char*str)//接收arr1和str两个字符串并进行比较,
                              //相同返回0,
                              //前大于后返回1,
                              //后大于前返回-1
strcmp的模拟实现
#include<stdio.h>
int my_strcmp(char* arr, char* str)
{
	while (*str)
	{
		if (*arr == *str)
		{
			arr++;
			str++;
		}
		else if (*arr > *str)
		{
			return 1;
		}
		else
		{
			return -1;
		}
		return 0;
	}
}
int main()
{
  int i = 0;
  char arr[50] = "abcADNhEj";
  char* str = "qwert";
  int ret = my_strcmp(arr, str);
  if (ret == 0)
{
	printf("他俩相等\n");
}
else if (ret > 0)
{
	printf("前者更大\n");
}
else
{
	printf("后者更大\n");
}




  return 0;
}

5, strncpy , strncat , strncmp函数

   这三个函数的设计只是多了一个参数,用于拷贝、拼接、比较源字符串的n个字符。实现逻辑类似,此处不再说明。

6,strstr函数

char*strstr(char*arr,char*str)//接收目标字符串arr和str,在arr中寻找str,
                              //若找到,返回arr中存在str的起始地址,
                              //否则返回空指针

strstr函数的实现

#include<stdio.h>
char* my_strstr(char* arr, char* str)
{
	char* first_str = str;
	char* move = arr;

	while (*str)
	{
		if (*arr!=*str)
		{
			move++;
			arr = move;
			str = first_str;
		}
		else
		{
			arr++;
			str++;
		}
	}
	return move;
}
int main()
{
	//实现strstr
	char arr[] = "abcdddefgh";
	char* str = "defg";
	int sz = sizeof(arr) / sizeof(arr[0]) - 1;
	char* my_strstr(arr, str);
	printf("%s",  my_strstr(arr, str));
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值