常用字符函数

  1. 字符串处理函数(   #include  <string.h> ):

    • strlen(str):返回字符串长度。
      因strlen库函数返回值类型为无符号整形,当两个strlen函数值相减有时会出现问题:
      #include <stdio.h>
      #include <string.h>
      
      int main()
      {
          char arr1[]="abcde";
          char arr2[]="qwertyu";
          printf("%u\n", strlen(arr1));//5   0101
          printf("%u\n", strlen(arr2));//7   0111   1110
          printf("%u\n", strlen(arr1) - strlen(arr2));//1111 1111 1111 1111 1111 1110(补码)(4294967294)
          printf("%d\n", strlen(arr1) - strlen(arr2));//1000 0000 0000 0000 0000 0000 0000 0010 (原码)(-2)
          if (strlen(arr1) - strlen(arr2) > 0) //无符号类型相减为负数会得到一个大的正数 5 - 7 = 4294967294
          {
              printf(">\n");
          }
          else
          {
              printf("!>\n");
          }
          return 0;                                     
      }
      无符号类型相减为负数会得到一个大的正数导致结果为‘>’,不符合预期的结果。
    • strcpy(dest, src):将源字符串复制到目标字符串。
      #include <stdio.h>
      
      void my_strcpy1(char* d,const char* s)
      {
      
      	while (*s)
      	{
      		*d = *s;
      		s++;
      		d++;
      	}
      	*d= '\0';
      }
      
      char* my_strcpy2(char* dest, const char* src)
      {
      	char* ret = dest;
      	while (*dest++ = *src++);
      	return ret;
      }
      
      int main()
      {
      	char arr1[] = "abcdef";
      	char arr2[20] = { 0 };
      	char arr3[20] = { 0 };
      
      	my_strcpy1(arr2, arr1);
      	printf("%s\n", arr2);
      
      	printf("%s\n", my_strcpy2(arr3, arr1));
      	return 0;
      }
    • strcat(dest, src):将源字符串添加到目标字符串的末尾。
      #include <stdio.h>
      #include <string.h>
      
      char* my_strcat(char* dest,const char* src)
      {
      	char* ret = dest;
      	while (*dest)
      	{
      		dest++;
      	}
      	while (*dest++ = *src++);
      	return ret;
      }
      int main()
      {
      	char arr1[20] = "hello ";
      	strcat(arr1, "world!");
      	printf("%s\n", arr1);
      	
      	printf("%s\n",my_strcat(arr1," Co"));
      	return 0;
      }
    • strcmp(str1, str2):比较两个字符串的内容是否相等。
      #include <stdio.h>
      #include <string.h>
      
      int my_strcmp(const char* str1,const char* str2)
      {
      	while (*str1 == *str2)
      	{	
      		if (*str1 == '\0')
      			return 0;
      		str1++;
      		str2++;
      	}
      	
      	return (*str1 - *str2);
      
      }
      
      int main()
      {
      	char arr1[] = "adb";
      	char arr2[] = "adc";
      	
      	int ret = strcmp(arr1, arr2);
      	int ret1 = my_strcmp(arr1, arr2);
      
      	if (ret < 0)
      	{
      		printf("<\n");
      	}
      	else if (ret == 0)
      	{
      		printf("==\n");
      	}
      	else
      	{
      		printf(">\n");
      	}
      
      	if (ret1 < 0)
      	{
      		printf("<\n");
      	}
      	else if (ret1 == 0)
      	{
      		printf("==\n");
      	}
      	else
      	{
      		printf(">\n");
      	}
      
      	return 0;
      }
    • strstr(str, substr):在字符串中查找子字符串第一次出现的位置。
      #include <stdio.h>
      
      char* my_strstr(const char* str1,const char* str2)
      {
      	const char* s1 = str1;
      	const char* s2 = str2;
      	const char* p = str1;
      	while (*p)
      	{
      		s1 = p;
      		s2 = str2;
      		while (*s1 && *s2 && *s1 == *s2)
      		{
      			s1++;
      			s2++;
      		}
      		if (!*s2)
      			return (char*)p;
      		p++;
      	}
      	return NULL;
      }
      
      int main()
      {
      	char str[] = "abbbcdef";
      	char substr[] = "bbc";
      	char* ret = my_strstr(str, substr);
      
      	if (ret == NULL)
      	{
      		printf("子串不存在\n");
      	}
      	else
      	{
      		printf("%s\n",ret);
      	}
      
      	return 0;
      }
    • strerror(errno):  用于将 errno 的值转换为对应的错误消息字符串。
      #include <stdio.h>
      #include <string.h>
      #include <errno.h>
      
      int main()
      {
      	FILE* pf = fopen("test.txt", "r");
      
      	if (pf == NULL)
      	{
      		printf("%s\n", strerror(errno));//返回对应的错误信息
      	}
      	return 0;
      }
    • strtok(str, delimiters):  用于将字符串拆分成多个子字符串。
      #include <stdio.h>
      #include <string.h>
      
      int main()
      {
      	const char* sep = "@.";
      	char str[] = "abc@defgh.igk.lmn";
      	char cp[30] = { 0 };
      	strcpy(cp,str);
      
      	char* ret = strtok(cp, sep);
      
      	while (ret != NULL) 
      	{
      		printf("%s\n",ret);
      		ret = strtok(NULL, sep);
      	}
      
      	return 0;
      }

 2.字符分类函数(   #include  <ctype.h> ):

  1. iscntrl(int c)

    • 检查字符是否为控制字符。
    • 控制字符是ASCII码表中的一些特殊字符,如换行符、回车符等。
    • 返回非零值(true)表示字符是控制字符,否则返回零(false)。
  2. isspace(int c)

    • 检查字符是否为空白字符,包括空格、制表符、换页符等。
    • 返回非零值(true)表示字符是空白字符,否则返回零(false)。
  3. isdigit(int c)

    • 检查字符是否为十进制数字(0-9)。
    • 返回非零值(true)表示字符是十进制数字,否则返回零(false)。
  4. isxdigit(int c)

    • 检查字符是否为十六进制数字,包括十进制数字和十六进制字母(a-f、A-F)。
    • 返回非零值(true)表示字符是十六进制数字,否则返回零(false)。
  5. islower(int c)

    • 检查字符是否为小写字母(a-z)。
    • 返回非零值(true)表示字符是小写字母,否则返回零(false)。
  6. isupper(int c)

    • 检查字符是否为大写字母(A-Z)。
    • 返回非零值(true)表示字符是大写字母,否则返回零(false)。
  7. isalpha(int c)

    • 检查字符是否为字母(a-z 或 A-Z)。
    • 返回非零值(true)表示字符是字母,否则返回零(false)。
  8. isalnum(int c)

    • 检查字符是否为字母或数字。
    • 返回非零值(true)表示字符是字母或数字,否则返回零(false)。
  9. ispunct(int c)

    • 检查字符是否为标点符号,即不是字母或数字的可打印字符。
    • 返回非零值(true)表示字符是标点符号,否则返回零(false)。
  10. isgraph(int c)

    • 检查字符是否为图形字符,即可打印字符中不包括空格的字符。
    • 返回非零值(true)表示字符是图形字符,否则返回零(false)。
  11. isprint(int c)

    • 检查字符是否为可打印字符,包括图形字符和空白字符。
    • 返回非零值(true)表示字符是可打印字符,否则返回零(false)。
      #include <stdio.h>
      #include <ctype.h>
      
      int main() {
          char input_char = '9';
      
          // 使用不同的字符分类函数来检查输入字符的类型
          if (isdigit(input_char)) {
              printf("%c 是一个数字\n", input_char);
          }
      
          if (isalpha(input_char)) {
              printf("%c 是一个字母\n", input_char);
      
              if (islower(input_char)) {
                  printf("%c 是一个小写字母\n", input_char);
              }
      
              if (isupper(input_char)) {
                  printf("%c 是一个大写字母\n", input_char);
              }
          }
      
          if (isalnum(input_char)) {
              printf("%c 是一个字母或数字\n", input_char);
          }
      
          if (isspace(input_char)) {
              printf("%c 是一个空白字符\n", input_char);
          }
      
          if (ispunct(input_char)) {
              printf("%c 是一个标点符号\n", input_char);
          }
      
          if (isgraph(input_char)) {
              printf("%c 是一个图形字符\n", input_char);
          }
      
          if (isprint(input_char)) {
              printf("%c 是一个可打印字符\n", input_char);
          }
      
          return 0;
      }

      字符转换函数tolower(ch),toupper(ch)

      #include <stdio.h>
      #include <ctype.h>
      
      int main() {
         
          char ch = 'A';
          
          printf("%c\n", tolower(ch));
      
          printf("%c\n", toupper(ch));
          return 0;
      }


       

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值