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

【C++ Primer Plus学习记录】字符串——C++ string类

C++处理字符串的方式有两种:

1.来自C语言,常被称为C-风格字符串(C-style string)【上一篇】

2.基于string类库的方法【本篇】

要使用string类,必须在程序中包含头文件string。string类位于名称空间std中,因此必须提供一条using编译指令,或者使用std::string来引用它。string类定义隐藏了字符串的数组性质,让您能够像处理普通变量那样处理字符串。

程序清单4.7说明了string对象与字符数组之间的一些相同点和不同点。

//程序清单4.7说明了string对象与字符数组之间的一些相同点和不同点。
#include<iostream>
#include<string>
using namespace std;int main()
{char charr1[20];//create an empty arraychar charr2[20] = "jaguar";//create an initialized arraystring str1;//create an empty string objectstring str2 = "panther";//create an initialized stringcout << "Enter a kind of feline: ";cin >> charr1;cout << "Enter another kind of feline: ";cin >> str1;cout << "Here are some felines:\n";cout << charr1 << " " << charr2 << " " << str1 << " " << str2 << endl;cout << "The third letter in " << charr2 << " is " << charr2[2] << endl;cout << "The third letter in " << str2 << " is " << str2[2] << endl;system("pause");return 0;
}

相同点:

· 可以使用C-风格字符串初始化string对象

·可以使用cin来将键盘输入存储到string对象中

·可以使用cout来显示string对象

·可以使用数组表示法访问存储在string对象中的字符

区别:可以将string对象声明为简单变量,而不是数组。

类设计让程序能够自动处理string的大小。例如,str1的声明创建一个长度为0的string对象,但程序将输入读取到str1中时,将自动调整str1的长度:

cin >> str1;      //str1 resized to fit input

这使得与使用数组相比,使用string对象更方便,也更安全。

理论上看,可以将char数组视为一组用于存储一个字符串的char存储单元,而string类变量是一个表示字符串的实体。

赋值、拼接和附加

使用string类时,某些操作比使用数组时更简单。例如,不能将一个数组赋给另一个数组,但是可以将一个string对象赋给另一个string对象

char charr1[20];            //create an empty array
char charr2[20] = "jaguar"; //create an initialized array
string str1;                //create an empty string object
string str2 = "panther";    //create an initialized string
charr1 = charr2;            //no array assignment
str1 = str2;                //object assignment ok

string类简化了字符串合并操作。可以使用运算符+将两个string对象合并起来,还可以使用运算符+=将字符串附加到string对象的末尾。

string str3;
str3 = str1 + str2; //assign str3 the joined strings
str1 += str2;       //add str2 to the end of str1
#include<iostream>
#include<string>
using namespace std;int main()
{string s1 = "penguin";string s2, s3;cout << "You can assign one string object to another:s2 = s1\n";s2 = s1;cout << "s1: " << s1 << ",s2: " << s2 << endl << endl;cout << "You can assign a C-style string to a string object.\n ";cout << "s2 = \"buzzard\"\n";   //转义序列\"表示双引号s2 = "buzzard";cout << "s2: " << s2 << endl << endl;cout << "You can concatenate strings:s3 = s1 + s2\n";s3 = s1 + s2;cout << "s3: " << s3 << endl << endl;cout << "You can append strings.\n";s1 += s2;cout << "s1 += s2 yields s1 = " << s1 << endl;s2 += " for a day";cout << "s2 += \" for a day\" yields s2 = " << s2 << endl << endl;system("pause");return 0;
}

string类的其他操作

在C++新增string类之前,对于C-风格字符串,程序员使用C语言库中的函数来完成这些任务。头文件cstring提供了这些函数,例如,可以使用函数strcpy()将字符串复制到字符数组中,使用函数strcat()将字符串附加到字符数组末尾:

strcpy(charr1,charr2); //copy charr2 to charr1
strcat(charr1,charr2); //append contents of charr2 to charr1

程序清单4.9对用于string对象的技术和用于字符数组的技术进行了比较。

//程序清单4.9对用于string对象的技术和用于字符数组的技术进行了比较
#include<iostream>
#include<string>
using namespace std;int main()
{char charr1[20];char charr2[20] = "jaguar";string str1;string str2 = "panther";//assignment for string objects and character arraysstr1 = str2; strcpy_s(charr1, charr2); //copy charr2 to charr1//appending for string objects and character arraysstr1 += " paste";//add paste to end of sttr1strcat_s(charr1, " juice");//add juice to end of charr1//find the length of a string object and a C-style stringint len1 = str1.size();//obtain length of str1//str1是一个对象,而size()是一个类方法。方法是一个函数,只能通过其所属类的对象进行调用//在这里,str1是一个string对象,而size()是string类的一个方法int len2 = strlen(charr1);//obtain length of charr1cout << "The string " << str1 << " contains " << len1 << " characters.\n";cout << "The string " << charr1 << " contains " << len2 << " characters.\n";system("pause");return 0;
}

string类I/O

//4.10 line input
#include<iostream>
#include<string>
using namespace std;int main()
{char charr[20];string str;//函数strlen()从数组的第一个元素开始计算字节数,直到遇到空字符//对于未被初始化的数据,第一个空字符的出现位置是随机的,因此在运行该处时,得到的数组长度可能不同cout << "Length of string in charr before input: " << strlen(charr) << endl;//未被初始化的string对象的长度被自动设置为0cout << "Length of string in str before input: " << str.size() << endl;  //注意此处两种求长度的方法不同cout << "Enter a line of text:\n";//句点表示法表明,getline()是istream类的一个类方法,cin是一个istream对象cin.getline(charr, 20);//该函数有两个参数,第一个参数是用来存储输入行的数组的名称,第二个参数是要读取的字符数。cout << "You entered: " << charr << endl;cout << "Enter another line of text:\n";//这里没有使用句点表示法,表明这个getline()不是类方法。也没有指出字符串长度的参数,因为string对象将根据字符串的长度自动调整自己的大小getline(cin, str); //cin now an argument;no length specifiercout << "You entered: " << str << endl;cout << "Length of string in charr after input:" << strlen(charr) << endl;cout << "Length of string in str after input: " << str.size() << endl;system("pause");return 0;
}

http://www.lryc.cn/news/570945.html

相关文章:

  • 机器学习笔记(5)——SMO优化算法(实现SVM)
  • 【模拟 贪心】B4207 [常州市赛 2021] 战士|普及+
  • 麻雀要革命2 第19节:风马牛不相及
  • 关于脉冲功率技术的认识
  • 优化网站设计(二十):使用多个主机来平衡负载
  • 命令模式Command Pattern
  • redis 中 Hash哈希介绍 及常用命令 (附有示例)
  • 目标检测总结:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD
  • STC 89C52 单片机引脚对应的功能以及实例讲解
  • 第六章、6.2 ESP32低功耗模式详解:深度睡眠与轻度睡眠实战指南
  • [python爬虫之路day5]:实战之电影天堂2019精选电影爬取
  • String.indexOf 用法
  • to avoid naming wrong index webpage for one website
  • Flash的126个为什么
  • Python | Python中最常用的100个函数(含内置函数、标准库函数及第三方库)
  • 《东周列国志》第十七回 宋国纳赂诛长万 楚王杯酒虏息妫
  • java permainan jombi_Ejaan ni Betul ke Salah?
  • [iOS] performSelectorOnMainThread支持多个参数
  • org.springframework.transaction.interceptor 类 TransactionProxyFactoryBean
  • VS2013+MFC 简易音乐播放器
  • 电商导购系统的基本架构与设计
  • 【习题解析】田忌赛马
  • linux设备树dts文件详解
  • matlab axis函数_MATLAB二维图形
  • HTML网页一键变黑白色调
  • Source Insight的入门使用
  • 网页鼠标点击特效案例收集
  • 如何使用十进制range()步长值?
  • python升级pip怎么出错了_Python,开启吐槽模式,新手必看!
  • linux命令chm app,Linux常用命令全集