「C++基础」字符串数组与string类

boyanx2周前技术教程3

每种编程语言,除了int,float,long这些最基本的数据类型外,字符与字符串也必须是“必备全家桶”里面的一员。

C++的字符串,对比许多后起之秀,当然说不上十分方便使用(也许会觉得难用),但其灵活性绝对是杠杠的。

字符串,本质上说其实就是“一串字符”,也就是字符数组。

字符串的初始化

char charr1[10] = "android"; //
char charr2[20] = {"hello"}; // C++ 11
char charr2[20] {"jaguar"}; // C++ 11
string str1 = "morgan"; // std::string
string str2 = {"morgan"};
string str3 {"morgan"};// C++ 11

我们可以通过两种方式来声明字符串类型,一种是char数组,一种是std标准库中的string类。

其实上面的char数组,等价于下面的形式:

char charr1[10] = {'a','n','d','r','o','i','d','\0','\0','\0'};

因为数组本质上其实也是指针,因此在C++中,在char数组用'\0'元素表示字符串的结束。

char数组必须要指定长度,相比较而言,string就不需要那么麻烦。

字符串的相关操作

1.获取字符串长度

int len1 = strlen(charr1);// 使用库函数 strlen()
int len_str1 = str1.size();//调用string对象的成员函数size();
  1. 字符串连接
char* newChars = strcat(charr1, charr2);// 结果是 "androidhello"
string newStr = str1 + str2;
  1. 字符串拷贝
strcpy(charr3, charr1);// dst, src: copy from charr1 to charr3;
string str4 = str1; // copy str1 to str4;
  1. 字符串的IO操作

通常我们都有从命令行输入字符串的诉求,来看看char数组、string对象分别是怎么实现的?

char name[20];
//cin >> name; 这种方法会有陷阱,后面展开说明
cin.getline(name, 20);
string sName;
getline(cin, sName);
cin >> sName;
  1. 查找子字符串:find
函数原型:
size_type find(const string& str, size_type pos=0) const

使用string替代char数组

char数组其实有不少缺点,C++建议使用string替代char数组,主要原因有以下几点:

  • char数组声明时必须指定长度,如果字符串太短则会浪费空间,太长则无法容纳。string无此问题。
  • string更安全:char数组本质是一个指针,一些字符串操作可能会覆盖不相干的内存区域。
char site[10] = "house";
strcat(site, "is white in DC."); //拼接后长度大于10,将会覆盖相邻的内存
  • char数组依赖'\0'作为字符串的结束符。


相关文章

Python 列表转换为字符串:实用指南

为什么在 Python 中将列表转换为字符串?Python 列表非常灵活,但它们并非在所有地方都适用。有时你需要以人类可读的格式呈现数据——比如在 UI 中显示标签或将项目保存到 CSV 文件。可能还...

Labview新手必看|字符串如何转换至数组?

亲爱的小伙伴们,大家好!记得之前给大家分享过如何通过Labview实现数组至字符串的转换,那么字符串至数组该如何转换呢?下面就给大家分享一下具体的实现方法。 1. 字符串至U8数组转换: 这里用到了...

Java Array 和 String 的转换(java将string转化为数组)

英文标题【Array to String Conversions】概述本页面中的内容对 Array 和 String 之间互相进行转换的方法进行一些说明。我们可以使用 原生 Java(vanilla...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。