【C++】标准库类型String

目录:

  • 标准库类型String
    • [1. 定义和初始化string对象](#1. 定义和初始化string对象)
    • [2. string对象上的操作](#2. string对象上的操作)
      • [2.1. 字符串的读取:](#2.1. 字符串的读取:)
      • [2.2. 字符串相加:](#2.2. 字符串相加:)
    • [3. 处理string对象中的字符](#3. 处理string对象中的字符)
      • [3.1. 处理每个字符](#3.1. 处理每个字符)

标准库类型String

使用string类型必须先包含相应头文件。同时作为标准库的一部分,string定义在命名空间std中。

c++ 复制代码
#include <string>
using std::string;

1. 定义和初始化string对象

与C语言不同,string本身就可作为一种数据类型,其实现不需要借助字符数组

c++ 复制代码
string s1;
string s2=s1;
string s3="HELLO";
string s4(10,'c'); //s4的内容是cccccccccc 
string s5("HELLO");

其中使用等号的是拷贝初始化,不使用等号的是直接初始化。当数据较多且重复时用直接初始化(如s4)更加省事。

2. string对象上的操作

一些操作如下:

c++ 复制代码
os<<s //将s写到输出流os中,返回os
is>>s //从is中读取字符串赋给s,字符串以空白分隔,返回is
getline(is,s) //从is中读取一行赋给s,返回is
s.empty() //s为空返回true,否则返回false
s.size() //返回s中字符的个数,类型为unsigned
s[n] //类似于C语言的字符串数组,返回第n个值,数组也是第一位从0开始
s1+s2 //返回s1和s2连接后的结果
s1=s2 //将s2的值赋给s1
s1==s2 //按照字典序比较s1和s2,其他比较方法和C语言的普通数据类型比较相同,并不需要使用特殊的函数,><也是通过字典序比较的

2.1. 字符串的读取:

c++ 复制代码
string s;
cin>>s; //直接将string对象读入s,遇到空白符停止(如空格符,换行符,制表符)

cin会忽略空白开头的字符,从第一个非空白的字符开始读取,直到遇到空白符停止,因此可以同时读入两个或者多个字符串,只需要用空格符加以区分即可。

但是当我们需要读入空格符的时候,我们可以使用getline函数来代替原来的>>运算符

c++ 复制代码
getline(cin,line);

这样就相当于在line中读入字符串,可以读入空格符号(' '),但是当遇到换行符的时候就停止

2.2. 字符串相加:

字符串类型的s1和s2可以直接相加,但是当遇到字面值的时候,相加时需要先与字符串类型的数据相加,示例代码如下:

c++ 复制代码
string s1="hello";
string s2="hello"+s1; //正确
string s3="hello"+"Bob"; //错误,因为字符串字面值不能直接相加
string s4="hello"+"Bob"+s1; //错误,因为编译器默认先进行计算前两个相加,即字符串字面量相加,然而这是非法的

3. 处理string对象中的字符

cctype头文件中可以直接使用的函数:

c++ 复制代码
isalnum(c) //当c为字母或者数字为true
isalpha(c) //当c是字母时为true
iscntrl(c) //当c是控制字符时为true
isgraph(c) //当c不是空格但可以打印时为true
islower(c) //当c是小写字母时为true
isprint(c) //当c是可打印字符时为true
ispunct(c) //当c是标点符号时为true(即c不是控制字符、数字、字母、可打印空白中的一种)
isspace(c) //当c是空白时为true(即c是空格、横向制表符、纵向制表符、回车符、换行符、进纸符中的一种)
isupper(c) //当c是大写字母时为true
isxdigit(c) //当c是十六进制数字时为真
tolower(c) //如果c是大写字母,输出相应小写字母,否则原样输出c
toupper(c) //如果c是小写字母,输出相应大写字母,否则原样输出c

3.1. 处理每个字符

使用基于范围的for语句

c++ 复制代码
string str("some string");
for(auto c : str)
    cout<<c<<endl;

auto c相当于定义一个变量,在这段代码中可以替换成char,他们的效果等同。其中quto相当于让编译器自己考虑该给c赋什么类型的变量,是一种通用且提高效率的方式。

通俗解释一下这段代码:for范围中,:冒号之前的相当于字符串中的单个字符,冒号后面的是字符串整个元素,也就是一种遍历的简化书写方式。

相关推荐
用户6869161349012 小时前
哈希表实现指南:从原理到C++实践
数据结构·c++
大老板a13 小时前
c++五分钟搞定异步处理
c++
全干engineer16 小时前
Web3-Web3.js核心操作:Metamask、合约调用、事件订阅全指南
开发语言·javascript·web3·区块链·智能合约
羑悻的小杀马特16 小时前
从信息孤岛到智能星云:学习助手编织高校学习生活的全维度互联网络
c++·学习·生活·api
刘一说16 小时前
资深Java工程师的面试题目(六)数据存储
java·开发语言·数据库·面试·性能优化
江沉晚呤时17 小时前
EventSourcing.NetCore:基于事件溯源模式的 .NET Core 库
java·开发语言·数据库
C++ 老炮儿的技术栈17 小时前
VSCode -配置为中文界面
大数据·c语言·c++·ide·vscode·算法·编辑器
祁同伟.17 小时前
【C++】类和对象(上)
c++
火鸟217 小时前
Rust 通用代码生成器:莲花,红莲尝鲜版三十六,哑数据模式图片初始化功能介绍
开发语言·后端·rust·通用代码生成器·莲花·红莲·图片初始化功能
90wunch17 小时前
更进一步深入的研究ObRegisterCallBack
c++·windows·安全