当前位置: 首页 > news >正文

C++ —— 字符型和字符串

字符型和字符串

  • 基本概念
  • 字符的本质
  • 转义字符
  • 原始字面量
  • 字符串型
    • C++风格字符串的常用操作:

基本概念

字符型(char)占用的内存空间是1个字节,书写只能用单引号包含,一个单引号中只能有一个字符

#include <iostream>
using namespace std;int main() {char c = 'a'; // 声明字符型变量c 并赋值为'a'cout << "c = " << c << endl;cout << "sizeof(c) = " << sizeof(c) << endl;
}

运行结果如下:

c = a
sizeof(c)= 1

在计算机中,任何数据都是用二进制存放的,最小的存储单元是字节。在内存中,不存放字符本身,而是存放与它对应的编码,即ASCII码
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是现今最通用的单字节编码方案,包含了33个控制字符(具有特殊含义无法显示的字符)和95个可显示字符。例如:字符a在内存中存放的是97,对应的二进制是01100001

  • 32:space(空格)
  • 48~57:0~9(10个阿拉伯数字)
  • 65~90:A~Z(26个大写英文字母)
  • 97~122:a~z(26个小写英文字母)
字符空格09AZaz
对应的ASCII码324857659097122

字符的本质

  • 字符的本质是整数,取值范围是0~127,占用的内存空间1字节,可以把它看成是1字节的整数;
#include <iostream>
using namespace std;int main() {char c1 = 'a';cout << "c1 = " << c1 << endl;cout << "sizeof(c1) = " << sizeof(c1) << endl;int c2 = 'a';cout << "c2 = " << c2 << endl;cout << "sizeof(c2) = " << sizeof(c2) << endl;return 0;
}

运行结果如下:

c1 = a
sizeof(c1) = 1
c2 = 97
sizeof(c2) = 4

  • 在书写的时候可以用单引号包含,也可以用整数(如果用整数书写,应填对应的ASCII码值);
  • 如果书写的时候用单引号包含,程序执行的时候,将把符号解释为对应整数
  • 显示的时候,把整数解释为对应符号,也可以直接显示整数;
int c3 = 65;
cout << "c3 = " << (char) c3 << endl;
cout << "sizeof(c3) = " << sizeof(c3) << endl;

运行结果如下:

c3 = A
sizeof(c3) = 4

  • 可以与整数进行任何运算,运算的时候,书写方式可以用字符,也可以用整数
int c4 = 'A' + 5;
cout << "c4 = " << c4 << endl;
cout << "c4 = " << (char) c4 << endl;
cout << "sizeof(c4) = " << sizeof(c4) << endl;

运行结果如下:

c4 = 70
c4 = F
sizeof(c4) = 4

转义字符

在C++程序中,使用转义字符的原因有两个:

  • 控制字符没有符号,无法书写,只能用其它的符号代替;
  • 某些符号已被C++征用,语义冲突,只能用其它的符号代替。
ASCII码值转义字符含义
0\0空,给字符型变量赋值时可以直接书写0。
10\n换行(LF) ,将当前位置移到下一行开头。
13\r回车(CR) ,将当前位置移到本行开头
9\t水平制表(HT) (跳到下一个TAB位置)
92\\斜线
34\"双引号,书写字符时不必转义。
39\’单引号,书写字符串中不必转义。

示例代码如下:

#include <iostream>
using namespace std;int main() {cout << "Hello World!" << "\n";cout << "你好!" << "\r" << "Hi~" << endl;cout << "666666\t777777\n";cout << "Hello World\\你好" << endl;cout << "Hi \"hhhhhhhhhhh\"" << endl; // 需要转义cout << "Hi 'hhhhhhhhhhh'" << endl; // 不需要转义char c = '\''; // 需要转义cout << "c = " << c << endl;return 0;
}

运行结果如下:

Hello World!
你好!
Hi~
666666 777777
Hello World\你好
Hi “hhhhhhhhhhh”
Hi ‘hhhhhhhhhhh’
c = ’

原始字面量

原始字面量(值)可以直接表示字符串的实际含义,不需要转义和连接。换句话说,就是如果原始的字符串中包含了转义字符,通过语法:R"(字符串的内容)"或者R"xxx(字符串的内容)xxx",可以取消转义。示例代码如下:

#include <iostream>
using namespace std;int main() {string path_1 = "/home/user/documents";cout << "The path_1 is: " << path_1 << endl;string path_2 = "abcd\nsfkjm\tjsnv";cout << "The path_2 is: " << path_2 << endl;string path_3 = R"(abcd\nsfkjm\tjsnv)";cout << "The path_3 is: " << path_3 << endl;string path_4 = R"111qqxx(abcd\nsfkjm\tjsnv)111qqxx";// 两边的标识符一定要对称cout << "The path_4 is: " << path_4 << endl;string s1 = R"(cvwebraskutynrwteqbf\S超低温乳果糖5疾苦6i。utl)";cout << "The s1 is: " << s1 << endl;string s2 = "cvwebras" "kutynrwteqbf""S超低温乳果糖5疾苦6i。utl";// 直接将多个字符串常量分行书写,编译器会在编译时自动拼接它们。cout << "The s2 is: " << s2 << endl;return 0;
}

运行结果如下:

The path_1 is: /home/user/documents
The path_2 is: abcd
sfkjm jsnv
The path_3 is: abcd\nsfkjm\tjsnv
The path_4 is: abcd\nsfkjm\tjsnv
The s1 is: cvwebras
kutynrwteqbf
S超低温乳果糖5疾苦6i。utl
The s2 is: cvwebraskutynrwteqbfS超低温乳果糖5疾苦6i。utl

字符串型

C++中,字符串有两种表示方法:

  • C++风格字符串:string 变量名 = "字符串的内容";
  • C风格字符串:char 变量名[] = "字符串的内容";

C风格字符串的本质是字符数组C++风格字符串的本质是,它封装了C风格字符串。

C++风格字符串的常用操作:

  • 赋值:变量名 = "字符串的内容";
  • 拼接:变量名 = 变量名 + "字符串的内容1" + "字符串的内容2" + ... + "字符串的内容n";
    如果字符串的内容都是常量,不要写加号+,如果内容很长,可以分成多行书写
  • 比较:支持==!=><关系运算符,常用的是==!=

示例代码如下:

#include <iostream>
using namespace std;int main() {string s1 = "Hello"; // 定义字符串并初始化cout << "s1 = " << s1 << endl;s1 = "World"; // 修改字符串内容cout << "s1 = " << s1 << endl;cout << "Please input a string: ";string s2;cin >> s2;cout << "s2 = " << s2 << endl;if(s1 == s2) {cout << "s1 and s2 are the same." << endl;} else if(s1 > s2) {cout << "s1 is greater than s2." << endl;} else {cout << "s1 is less than s2." << endl;}// string s3 = "HelloWorld" + "qcd" + "新年快乐" + "12247gyv13fewv" + "嘿嘿jskbd-63rebag"; // 字符串的内容都是常量,不能写加号+,编译会报错string s3 = "HelloWorld" "qcd" "新年快乐" "12247gyv13fewv""嘿嘿jskbd-63rebag"; // 正确写法,字符串拼接,内容很长的话,换行书写。cout << "s3 = " << s3 << endl;;return 0;
}

运行结果如下:

s1 = Hello
s1 = World
Please input a string: Worldaaa
s2 = Worldaaa
s1 is less than s2.
s3 = HelloWorldqcd新年快乐12247gyv13fewv嘿嘿jskbd-63rebag

感谢浏览,一起学习!


http://www.mrgr.cn/news/82232.html

相关文章:

  • 【Ubuntu】安装华为的MindSpore
  • 阶梯费用计算demo
  • vue-i18n使用$t导致ts类型报错问题
  • UE5.3 虚幻引擎 Windows插件开发打包(带源码插件打包、无源码插件打包)
  • 在 SQL 中,区分 聚合列 和 非聚合列(nonaggregated column)
  • 基于 GitHub API 的 Issue 和 PR 自动化解决方案
  • 作业:C高级:Day4
  • Ceph 手动部署(CentOS9)
  • Coding Our First Neurons
  • javaEE-多线程进阶-JUC的常见类
  • 设计模式 创建型 工厂模式(Factory Pattern)与 常见技术框架应用 解析
  • 升级Cypress到10.8.0
  • 【老白学 Java】Border 布局管理器
  • C++并发:在线程间共享数据
  • spring boot 异步线程池的使用
  • SpringCloud源码分析-Lettue Redis
  • shell脚本的【算数运算、分支结构、test表达式】
  • 03-类和对象(上)
  • SQL偏移类窗口函数—— LAG()、LEAD()用法详解
  • 单片机-蜂鸣器实验
  • vue视频录制 限制大小,限制时长
  • 思科无线控制器 AC5508 初始化
  • 操作系统课后题总复习
  • SpringCloud源码-Ribbon
  • Docker Compose编排
  • spring boot通过文件配置yaml里面的属性