欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++学习笔记5 —— 标准库类型String

程序员文章站 2022-07-15 13:42:17
...

string是标准库中的,要使用其需要添加
#include
using std::string;//或者直接using namespace std;

  1. string
    1)定义与初始化:
string s1;
string s2 = s1;
string s3 (s1);
string s4 = "hello";
string s5 ("hello");
string s6 = (n,'c');//n表示个数,c代表某一个字符

注:直接初始化、拷贝初始化(有等号)

  2)string对象操作:
a. 读写:

string s;
 cin>>s;
 cout<<s<<endl;

:以上输入是子宫忽略开头的空白(空格,制表符,换行符)至下一处空白停止。

b. 读写未知数量:

string s;
while(cin>>s)//反复读取,直到末尾(空白)
cout<<s<<endl;

使用getline函数读取一行:

string s;
while(getline(cin,s))
cout<<s<<endl;

注:getline函数可以读取一行,遇到换行符停止(换行符也被读取了),并将读取的内容存到string对象中(不存换行符)
注:以上的代码,读取一行后,输出,按回车,不会跳出循环(因为换行时的回车符被读取了)

改进的代码:

string s;
while (getline(cin,s))
if (!s.empty())//如果s不为空则为真
cout<<s<<endl;
else break;//输入一行后,回车,显示该行,再回车,表示输入为空,跳出循环

c. empty()和size()函数
empty() 根据函数是否为空返回一个布尔值
size() 函数返回string的长度(字符的个数。不包括换行符)

:size函数返回的是string::size_type类型的的值,不是int也不是unsigned int,所以作比较的时候需注意如s.size()<n(int型)结果可断定是ture,所以不能混用size()函数返回的类型和int型

注:sizeof运算符:不是函数,而是运算符,返回表达式或者一个类型名所占的字节数。

  3)比较string对象

规则:a. 按照字典顺序,A(65), a(97)
b. 按第一个相异字符比较结果
c.如果长度不同且较短的字符的每一个字符都小于长的字符串的相应位置的字符,则结果是短的小

  4)string 对象相加

规则:a. 2个string相加,相当于拼接
b. 字面值(字符字面值、字符串字面值)+string类型。+号两侧至少有一个是string类型的。

string s="abc";
cout<<s+"def"<<endl;//可以,输出abcdef
cout<<"abc"+"def"<<endl;//错误,"abc"与“def"是字面值(字符串字面值)const型,不能用做+运算

  5) 处理string 中的字符

a.寻找、定位
b.编辑

注1:c++中cctype头文件中定义了很多标准函数来处理
C++学习笔记5 —— 标准库类型String
注2:c++的标准库头文件没有.h 的后缀,并在文件名加上了一个c

5.1 基于范围的for语句
格式:for(声明:表达式)如:

//把string对象s中的每个元素输出
string s ("hello");
for(auto c:s)//对string类型的s,用类型为自动推断的变量c去遍历s的每一个基本元素
cout<<c<<endl;

//统计string中的标点个数

string s("helllo world!!!")decltype(s.size())  n = 0;
for(auto c:s)
if (ispunct(c))
 &emsp;++n;
 cout<<n<<"个标点"<<endl;

注:当需要进行编辑时,变量的类型必须为引用
//把字符串的字母改成大写

sring s="abc";
for(auto &c,s)
c = toupper(c);
cout<<s<<endl;

5.2 基于局部的下标运算符[]

下标从0开始,即s[0]表示s中的第一个元素。下表的取值一定是大于0且小于字符串的长度,类型设为string::size_type

注:使用下标运算符访问空的字符串会引发问题,所以使用前,一定要判断,用empty()函数即可

string s;
cout<<s[0]<<endl;//s未初始化,为空,用下表运算符不合法。

注2:下标可以执行迭代和随机访问
1)迭代
for循环等

2)随机访问
//把0到15之间的十进制数转换为对应的十六进制

const string hex="0123456789ABCDEF"
cout<<"请输入0-15的数"<<endl;
string result;
string::size_type n;
while(cin>>n)//当停止输入
if (n<hex.size())
result +=hex[n];
cout<<result<<endl;
相关标签: c++