前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C语言】字符与字符串---从入门到入土级详解

【C语言】字符与字符串---从入门到入土级详解

作者头像
修修修也
发布2024-04-01 16:24:02
670
发布2024-04-01 16:24:02
举报

一.字符类型和字符数组(串)简介

1.ASCII

🌱先来看看百度百科对ASCII的定义

🌱而ASCII的产生原因是: 在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。

🌱ASCII的内容:


2.定义,初始化,使用

1>字符的定义及初始化

因为计算机使用数字编码来处理字符,即用特定的整数表示特定的字符。我们最常用的编码就是ASCII编码。我们先定义一个名叫ch的字符变量,再给它赋值为’A‘,如:

代码语言:javascript
复制
char ch;
ch='A';

在C语言中,用单引号括起来的单个字符被称为字符常量。编译器一发现’A‘,就会将其转换成相应的代码值。因此字符数据的初始化中,单引号必不可少。

实际上,字符是以数值形式储存的,所以也可以使用数字代码值来赋值,如:

代码语言:javascript
复制
char ch=65;

因为虽然65是int类型,但是它在char类型能表示的范围内,所以将其赋值给ch没问题。


2>字符串的定义及初始化

字符串是一个或多个字符的序列,如下所示:

代码语言:javascript
复制
"Hello world"

注意,双引号不是字符串的一部分。双引号仅告知编译器它括起来的是字符串,正如单引号用于标识单个字符一样。

代码语言:javascript
复制
char arr[15]="Hello world";

实际如上字符串在内存中的存储方式是:

该字符数组的末尾位置的字符\0是空字符,C语言用它标记字符串的结束。空字符不是数字0,它是非打印字符,其ASCII码值是(或等价于)0。C中的字符串一定以空字符结束,这意味着数组的容量必须至少比待存储字符串中的字符数多1。否则如果因为容量不够漏存了\0,将会导致系统出现一些bug。如下bug就是因为数组长度不够存储\0导致的:

因为C语言大多数的库函数在处理字符串时都会默认将\0作为字符串的结尾,如我们后面会提到的:strlen()函数(字符串长度计算函数),strcpy()函数(字符串拷贝函数)等大多都是以识别出\0来作为程序的结束标志,因此对于字符串来说,\0的存在至关重要。但是我们在定义和初始化字符串时,却不用特意在字符串的末尾安放\0,因为当字符数组容量允许时,计算机会默认帮助我们在末尾添上\0的。而在这点上字符串常量也是同理,如:

可以看到,打印的结果没有出现之前的bug现象,因此即便是字符常量,计算机也会默认帮助我们在结尾添上\0。


二.字符

1.字符的输入与输出

字符的输入常用:scanf()函数

getchar()函数

字符的输出常用:printf()函数

putchar()函数


2.常见字符操作函数

1>字符大小写转换

方法一:使用 `toupper` 和 `tolower` 函数,这两个函数分别将字符转换为大写和小写形式。

方法二:使用字母的ASCII码值特性,给大写字母+32转换成小写字母,给小写字母-32转换成大写字母。

方法三:使用位运算,将字符的 ASCII 码与 32(二进制为 0b00100000)进行按位异或运算,即可将小写字母转换为大写字母,反之亦然。例如,`'a' ^ 32` 的结果为 `'A'`,`'A' ^ 32` 的结果为 `'a'`。如:

有关大小写字母的三种转换方式有感兴趣的朋友可以移步我的这篇博客:【C语言】字母转换大小写的三种方法

https://blog.csdn.net/weixin_72357342/article/details/130932158?spm=1001.2014.3001.5502 里面有非常详细的toupper()函数和tolower()函数的参数解读及使用详解同时还包含方法二和方法三的具体实现步骤。因此这篇博客中对该部分内容就不赘述了。


2>字符类型判断

方法一:库函数判断 字符类型判断相关库函数 序号函数名函数作用1 isdigit()判断字符是否为数字2isalpha()判断字符是否为字母3isalnum()判断字符是否为数字或字母4isspace()判断字符是否为空格字符5isupper()和 islower()分别用于判断字符是否为大写字母和小写字母6iscntrl()判断字符是否为控制字符7isprint()判断字符是否为可打印字符8ispunct()判断字符是否为标点符号

方法二:使用ASCII数值区间或字符区间判断,如:

代码语言:javascript
复制
char ch='c';
int letter=0;
if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))
            letter++;

上述代码就是使用字符区间来判断的例子。

方法三:当然我们也可以直接使用ASCII码值来进行判断,如:

代码语言:javascript
复制
char ch='s';
int letter=0;
if((ch>=65&&ch<=90)||(ch>=97&&ch<=122))
            letter++;

有关字符类型的三种判断方式有感兴趣的朋友可以移步我的这篇博客: 【C语言】字符类型判断的三种方式

https://blog.csdn.net/weixin_72357342/article/details/130956167?spm=1001.2014.3001.5501 里面有非常详细的C语言字符判断库函数详解及其使用,同时还包含方法二和方法三的具体实现步骤。因此这篇博客中对该部分内容就不赘述了,有兴趣的可以去看看。


三.字符串

1.字符串的输入与输出

字符串的输入常用scanf()函数,gets()函数,fgets()函数:

字符串的输出常用printf()函数,puts()函数,fputs()函数:


2.常见字符串操作函数

1>字符串拷贝

strcpy()函数

函数详解见文末文章 strncpy()函数


2>字符串长度

strlen()函数

函数详解见文末文章


3>字符串比较

strcmp()函数

strncmp()函数


4>字符串连接与分割

字符串连接: strcat()函数

strncat()函数

字符串分割: strtok()函数


5>字符串搜索与定位

strchr()函数

strrchr()函数

strstr()函数

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-04-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.字符类型和字符数组(串)简介
    • 1.ASCII
      • 2.定义,初始化,使用
        • 1>字符的定义及初始化
        • 2>字符串的定义及初始化
    • 二.字符
      • 1.字符的输入与输出
        • 2.常见字符操作函数
          • 1>字符大小写转换
          • 2>字符类型判断
      • 三.字符串
        • 1.字符串的输入与输出
          • 2.常见字符串操作函数
            • 1>字符串拷贝
            • 2>字符串长度
            • 3>字符串比较
            • 4>字符串连接与分割
            • 5>字符串搜索与定位
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档