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"(cvwebras
                kutynrwteqbf\
                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

感谢浏览,一起学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值