【C语言基础】:字符函数和字符串函数-1

简介: 【C语言基础】:字符函数和字符串函数

一、字符函数

1. 字符分类函数

C语言中有一系列的函数是对字符进行分类的,就是对判断一个字符属于什么类型的字符,这类字符函数的使用都要包含一个头文件ctype.h。

7f776f4ebfe1ca185eae6ab220f7f292_1852d099655a4879bc9c97b21d5c497e.png


这些函数的使用方法非常类似,这里我们就只举一个例子。

int islower ( int c );

在C语言中,islower是一个用于判断字符是否为小写字母的函数。该函数接受一个整数参数c,它应该是无符号字符或EOF(常量)。如果参数c是小写字母,则返回非零值(真);否则返回0(假)。


【示例】将字符串中的小写字母转大写,其他字符不变。


#include<stdio.h>
#include<ctype.h>
int main()
{
  char str[] = "Test String.\n";
  int i = 0;
  char c;
  while (str[i])
  {
    c = str[i];
    if (islower(c))
      c -= 32;  // 小写字母的ASCII码值减去32就等于它对应的大写字母的ASCII码
    putchar(c);
    i++;
  }
  return 0;
}

89b450488b43c8ee4827c9e6c3733ed4_66d2e1317f0f4563be7e1bc754f24212.png


2. 字符转化函数

C语言提供了2个字符转换函数:


C语言提供了2个字符转换函数:

int tolower ( int c ); //将参数传进去的⼤写字⺟转⼩写 
int toupper ( int c ); //将参数传进去的⼩写字⺟转⼤写

在上面的示例中,我们将小写转大写,是-32完成的效果,有了转换函数,就可以直接使用 tolower 函

数。


#include<stdio.h>
#include<ctype.h>
int main()
{
  char str[] = "Test String.\n";
  int i = 0;
  char c;
  while (str[i])
  {
    c = str[i];
    if (islower(c))
      c = toupper(c);
    putchar(c);
    i++;
  }
  return 0;
}

db97ea7a8734ff23595eb773980bf868_bd3671542d8c4688a4c22fbcd5353a22.png


二、字符串函数

1. strlen函数的使用和模拟实现

函数原型:

size_t strlen ( const char * str );
  • 字符串以 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前⾯出现的字符个数(不包含 ‘\0’ )。
  • 参数指向的字符串必须要以 ‘\0’ 结束。
  • 注意函数的返回值为 size_t,是无符号的( 易错 )
  • strlen的使用需要包含头文件
  • 学会strlen函数的模拟实现


strlen函数的使用

计算字符串的长度


#include<stdio.h>
#include<string.h>
int main()
{
  char str1[] = "abcdef";
  size_t len = strlen(str1);
  printf("%zu\n", len);
  return 0;
}


390bc4e112192196ec6ad10dfcf3f7a8_0b319aed32fe4d5f88d96cccf1c5f38b.png

strlen函数的模拟实现

方法一:计数器的方式实现


#include<stdio.h>
#include<assert.h>
int my_strlen(const char* str)  // const修饰,使其不能被修改
{
  int count = 0;
  assert(str);  // 断言,避免传入空指针
  while (*str)
  {
    count++;  // 进入循环,说明不为空
    str++;
  }
  return count;
}
int main()
{
  char str1[] = "abcdef";
  int len = my_strlen(str1);
  printf("%d\n", len);
  return 0;
}

53cb2ebf2c65ea6ace73d0f30272da4a_112f84db469044b4b2816f94469ef68f.png

方法二:递归实现


#include<stdio.h>
#include<assert.h>
int my_strlen(const char* str1)
{
  assert(str1);   // 断言,避免传入空指针
  if (*str1 == '\0')
    return 0;  // 等于'\0',说明字符串结束,直接返回
  else
    return 1 + my_strlen(str1 + 1);
}
int main()
{
  char str1[] = "abcdef";
  int len = my_strlen(str1);
  printf("%d\n", len);
  return 0;
}

0b900382721b836c5c7b7f59a86e0579_a32d3268e64e4d459e4e337ae10355ed.png

方法三:指针 - 指针的方式实现


#include<stdio.h>
int my_strlen(char* s)
{
  char* p = s;
  while (*p != '\0')
    p++;
  return p - s;
}
int main()
{
  int len = my_strlen("abcdef");
  printf("%d\n", len);
  return 0;
}

f7af52d4ad92b8342fd87e7629e3c6ca_3021196930094cefb988bca6eeb2c1f6.png


【C语言基础】:字符函数和字符串函数-2

https://developer.aliyun.com/article/1538287

相关文章
|
1天前
|
存储 缓存 C语言
【C语言】字符函数,字符串函数,内存函数
C语言中的字符串函数和内存函数
8 0
【C语言】字符函数,字符串函数,内存函数
|
7天前
|
C语言
C语言5 字符输出函数和格式输出函数
C语言5 字符输出函数和格式输出函数
13 1
|
9天前
|
算法 编译器 C语言
深入浅出C语言—【函数】下
深入浅出C语言—【函数】下
|
21天前
|
Java C语言 C++
定义C语言的int main()函数
定义C语言的int main()函数
|
22天前
|
存储 移动开发 C语言
技术心得记录:嵌入式开发中常用到的C语言库函数
技术心得记录:嵌入式开发中常用到的C语言库函数
16 1
|
7天前
|
存储 C语言
C语言6 字符串输入和格式输入函数
C语言6 字符串输入和格式输入函数
9 0
|
22天前
|
Java 程序员 Linux
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
22 0
|
25天前
|
C语言
【C语言基础篇】字符串处理函数(四)strcmp的介绍及模拟实现
【C语言基础篇】字符串处理函数(四)strcmp的介绍及模拟实现
|
24天前
|
C语言
C语言prinf函数
C语言prinf函数
14 4
|
24天前
|
编译器 程序员 Serverless
函数(C语言)
函数(C语言)