IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 字符串讲解 -> 正文阅读

[C++知识库]字符串讲解

目录

引言

字符串的定义和存储

字符串的打印

%s方式进行打印

循环方式进行打印

字符串的长度

字符数组的大小

区分sizeof()和strlen()


引言

在我们的生活中,有很多一长串的字符需要集中处理,比如说姓名、省份证号,这时,我们就需要引入一个新的概念---字符串。

“hello world!\n”

这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。

字符串的定义和存储

在C语言中,整形我们用int类型来开辟空间进行存储,字符类型我们又使用到了char,那么有没有一种类型可以存储字符串呢?

因为char是一个字节,只能存放一个字符,这是我们可以借助到数组,数组是在内存中开辟一块连续的存储空间来进行存储多个数据类型相同的数据元素,所以我们可以借助字符数组来进行存储字符串。

char arr[]=“hello world!”

上面代码就是采用了字符数组来进行存储。

字符串的打印

%s方式进行打印

%d是整型十进制输入输出格式,%f打印单精度浮点数,%lf打印双精度浮点数,%c打印单个字符,%x打印十六进制数字,那么,%s则是打印字符串的格式

#include<stdio.h>
int main(){
char arr[]="hello world!";
printf("%s\n",arr);
return 0;
}

循环方式进行打印

#include<stdio.h>
int main(){
  char arr[]="hello world!";
  for(int i=0;i<=(sizeof(arr)/sizeof(char)-2);i++){
      printf("%c",arr[i]);
  }
  return 0;
}

字符串的长度

在C语言中。求字符串的长度需要借助到一个strlen()的函数,需要引用string.h的头文件。

#include<stdio.h>
#include<string.h>
int main(){
char arr[]="hello world!";
printf("%d\n",strlen(arr));
return 0;
}

最终输出的结果是12,注意空格也算一个字符。

那么,如果字符串的定义采用下面的方式定义呢?

#include<stdio.h>
#include<string.h>
int main(){
char arr[]={'h','e','l','l','o',' ','w','o','r','l','d','!'};
printf("%d\n",strlen(arr));
return 0;
}

我们此时却发现,打印的结果竟然是随机值。

这是因为字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。

第一个代码在!后面隐藏了\0,当算长度时读到隐藏的\0停止计算,故而结果为12。第二个代码是数组的常规初始化,!后面并没有\0转义字符,当算长度时未读到\0,故一直往下统计直至遇到\0,因此产生的输出结果为随机值。

为了在第二个代码的基础上稍作修改,还能计算正确的长度,我们只需要在末尾加上\0的转义字符就可以了。如下代码:

#include<stdio.h>
#include<string.h>
int main(){
char arr[]={'h','e','l','l','o',' ','w','o','r','l','d','!','\0'};
printf("%d\n",strlen(arr));
return 0;
}

字符数组的大小

计算数组类型的大小我们需要借助sizeof()关键字,单位为字节。

#include<stdio.h>
int main(){
char arr[]="hello world!";
printf("%d\n",sizeof(arr));
return 0;
}

上面代码由于字符串隐藏了\0,而\0在数组中也开辟占用了一块存储空间,所以上面代码输出的结果为13。

#include<stdio.h>
int main(){
char arr[]={'h','e','l','l','o',' ','w','o','r','l','d','!'};
printf("%d\n",sizeof(arr));
return 0;
}

上面代码由于该字符数组末位没有\0,所以最后数组大小计算为12。

#include<stdio.h>
int main(){
char arr[]={'h','e','l','l','o',' ','w','o','r','l','d','!','\0'};
printf("%d\n",sizeof(arr));
return 0;
}

上面代码由于该字符数组末位有\0,所以最后数组大小计算为13。

区分sizeof()和strlen()

sizeof()和strlen()二者之间并没有必然的联系,一个是C语言常见32个关键字之一,是计算类型或者变量所占内存空间的大小(单位为字节),另一个是库函数,需要引用string.h的头文件,是用来计算字符串的长度,遇到\0停止计算(结果不包含\0在内)。

下面,我通过一个代码来进行演示

#include<stdio.h>
#include<string.h>
int main(){
char arr1[]="dengfenglai";
char arr2[]={'d','e','n','g','f','e','n','g','l','a','i'};
char arr3[]={'d','e','n','g','f','e','n','g','l','a','i','\0'};
printf("%d\n",strlen(arr1));//11
printf("%d\n",strlen(arr2));//随机值
printf("%d\n",strlen(arr3));//11
printf("%d\n",sizeof(arr1));//12
printf("%d\n",sizeof(arr2));//11
printf("%d\n",sizeof(arr3));//12
return 0;                                             
}

通过上面代码以及注释里面的答案,可以帮助我们更好地理解。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-25 12:21:44  更:2021-10-25 12:22:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:16:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码