C++ 教程(16)——字符串

news/2024/10/31 5:34:51/

C++ 字符串

C++ 提供了以下两种类型的字符串表示形式:

  • C 风格字符串
  • C++ 引入的 string 类类型

C 风格字符串

C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持。字符串实际上是使用 null 字符 \0 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。

下面的声明和初始化创建了一个 RUNOOB 字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词 RUNOOB 的字符数多一个。

char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'};

依据数组初始化规则,您可以把上面的语句写成以下语句:

char site[] = "RUNOOB";

以下是 C/C++ 中定义的字符串的内存表示:

其实,您不需要把 null 字符放在字符串常量的末尾。C++ 编译器会在初始化数组时,自动把 \0 放在字符串的末尾。让我们尝试输出上面的字符串:

实例

#include <iostream>

using namespace std;

int main ()

{

char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'};

cout << "菜鸟教程: ";

cout << site << endl;

return 0;

}

当上面的代码被编译和执行时,它会产生下列结果:

菜鸟教程: RUNOOB

C++ 中有大量的函数用来操作以 null 结尾的字符串:

序号函数 & 目的
1strcpy(s1, s2);
复制字符串 s2 到字符串 s1。
2strcat(s1, s2);
连接字符串 s2 到字符串 s1 的末尾。连接字符串也可以用 + 号,例如:
string str1 = "runoob";
string str2 = "google";
string str = str1 + str2;
3strlen(s1);
返回字符串 s1 的长度。
4strcmp(s1, s2);
如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0。
5strchr(s1, ch);
返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
6strstr(s1, s2);
返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。

下面的实例使用了上述的一些函数:

实例

#include <iostream>

#include <cstring>

using namespace std;

int main ()

{

char str1[13] = "runoob";

char str2[13] = "google";

char str3[13];

int len ;

// 复制 str1 到 str3 strcpy( str3, str1);

cout << "strcpy( str3, str1) : " << str3 << endl;

// 连接 str1 和 str2 strcat( str1, str2);

cout << "strcat( str1, str2): " << str1 << endl;

// 连接后,str1 的总长度 len = strlen(str1);

cout << "strlen(str1) : " << len << endl;

return 0;

}

当上面的代码被编译和执行时,它会产生下列结果:

strcpy( str3, str1) : runoob
strcat( str1, str2): runoobgoogle
strlen(str1) : 12

C++ 中的 String 类

C++ 标准库提供了 string 类类型,支持上述所有的操作,另外还增加了其他更多的功能。我们将学习 C++ 标准库中的这个类,现在让我们先来看看下面这个实例:

现在您可能还无法透彻地理解这个实例,因为到目前为止我们还没有讨论类和对象。所以现在您可以只是粗略地看下这个实例,等理解了面向对象的概念之后再回头来理解这个实例。

实例

#include <iostream>

#include <string>

using namespace std;

int main ()

{

string str1 = "runoob";

string str2 = "google";

string str3; int len ;

// 复制 str1 到 str3 str3 = str1;

cout << "str3 : " << str3 << endl;

// 连接 str1 和 str2 str3 = str1 + str2;

cout << "str1 + str2 : " << str3 << endl;

// 连接后,str3 的总长度 len = str3.size();

cout << "str3.size() : " << len << endl;

return 0;

}

当上面的代码被编译和执行时,它会产生下列结果:

str3 : runoob
str1 + str2 : runoobgoogle
str3.size() :  12

http://www.ppmy.cn/news/470710.html

相关文章

[转载]无线通信系统中的调制解调基础(一):AM和FM

原文地址&#xff1a;无线通信系统中的调制解调基础&#xff08;一&#xff09;&#xff1a;AM和FM 作者&#xff1a;逝者如云 第一部分解释了调幅&#xff08;AM&#xff09;和调频&#xff08;FM&#xff09;的基础&#xff0c;并阐述了优点和缺点。第二部分解析了频移键控&a…

北京调频(FM)无线广播发射频率/频道表 (转载)

发射频率(兆赫)节目省区县发射台名发射功率(千瓦)91.5 中国国际广播电台轻松调频北京市市辖区海淀区中央广播电视发射台1088.7 中国国际广播电台劲曲调频北京市市辖区海淀区中央广播电视发射台1090.5 中国国际广播电台环球资讯广播北京市市辖区海淀区中央广播电视发射台3100.6 …

【Matter】如何在Linux平台下测试Matter应用级通信(虚拟设备)

如何在Linux平台下测试Matter应用级通信(虚拟设备) 准备工作 1. 递归克隆Matter仓库 执行如下命令&#xff1a; git clone --recurse-submodules gitgithub.com:project-chip/connectedhomeip.git如果克隆过程中发生报错&#xff0c;请执行如下命令来同步子模块&#xff1a;…

【备战秋招】每日一题:2023.05-B卷-华为OD机试 - 经典屏保

为了更好的阅读体检&#xff0c;可以查看我的算法学习博客恢复数字序列 题目描述 D V D DVD DVD机在视频输出时&#xff0c;为了保护电视显像管&#xff0c;在待机状态会显示"屏保动画”&#xff0c;如下图所示&#xff0c; D V D DVD DVD L o g o Logo Logo在屏幕内来回…

Flink将数据写入CSV文件后文件中没有数据

Flink中有一个过时的sink方法:writeAsCsv,这个方法是将数据写入CSV文件中,有时候我们会发现程序启动后,打开文件查看没有任何数据,日志信息中也没有任何报错,这里我们结合源码分析一下这个原因. 这里先看一下数据处理的代码 代码中我是使用的自定义数据源生产数据的方式,为了方…

红米note2能刷机没显示无服务器,我的红米note2彻底黑屏变砖了,进不了Fastboot和Recovery模式了,还能救回来吗?...

满意答案 mojsi 2020.03.09 采纳率&#xff1a;44% 等级&#xff1a;12 已帮助&#xff1a;7771人 小米2手机&#xff0c;进入recovery模式和fastboot模式的方法&#xff1a;recovery模式进入方式&#xff1a;关机按住音量上开机键recovery模式进入方式&#xff1a;关机按住…

红米手机TWRP读不了刷机包成功解决记录

我有部没用的红米4A手机&#xff0c;打算刷个魔趣试试&#xff0c;结果问题来了 我的魔趣版本要求TWRP3.2.1以上&#xff0c;好不容易找到红米4A的TWRP3.3.1 结果遇到recovery读不了刷机包问题&#xff0c;百度一下&#xff0c;说是data要格式化&#xff0c; 我用3.3.1版本格式…

红米note手机GPS定位不了

http://jingyan.baidu.com/article/380abd0a71bc061d90192ce2.html 方法/步骤 打开红米的“安全中心” 选择“授权管理” 点击“应用权限管理” 选择“应用管理” 选择地图程序 将“定位”勾选&#xff0c;再重新打开导航&#xff0c;GPS就可以定位了。 来自 “ ITPUB博…