本文内容来自于对狄泰学院 唐佐林老师 C++深度解析 课程的学习总结
标准库中的字符串类
C++ 语言 直接支持 C 语言的所有概念
C++ 语言中 没有原生的字符串类型
C++ 标准库提供了 string 类型
string 直接支持 字符串连接
string 直接支持 字符串的大小比较
string 直接支持 子串查找和提取
string 直接支持 字符串的插入和替换
字符串 与 数字 的转换
- 标准库中提供了相关的类对字符串和数字进行转换
- 字符串流类(sstream)用于 string 的转换
sstream - 相关头文件
istringstream - 字符串输入流
ostringstream - 字符串输出流
使用方法
string -> 数字
istringstream iss(“123.45”);
double num;
iss >> num;
数字 -> string
ostringstream oss;
oss << 543.21;
string s = oss.str();
实验程序
使用字符串流类sstream实现字符串和数字之间的转换
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
#define TO_NUMBER(s, n) (istringstream(s) >> n)
#define TO_STRING(n) (((ostringstream&)(ostringstream() << n)).str())
void to_number(string s, int& num)
{
istringstream iss(s);
iss >> num;
}
string to_string(int num)
{
ostringstream oss;
oss << num;
return oss.str();
}
int main()
{
int num_tmp = 0;
to_number("123", num_tmp);
cout << num_tmp << endl;
string s = to_string(100);
cout << s << endl;
TO_NUMBER("456", num_tmp);
cout << num_tmp << endl;
s = TO_STRING(200);
cout << s << endl;
double d_tmp = 0.0;
TO_NUMBER("123.456", d_tmp);
cout << d_tmp << endl;
s = TO_STRING(123.456);
cout << s << endl;
return 0;
}
运行结果
实验结果:void to_number(string s, int& num) 完成了字符串向整形数转换
string to_string(int num) 完成了整形数向字符串的转换
TO_NUMBER 宏完成了字符串向任意类型数值的转换
TO_STRING 宏完成了任意类型数值向字符串的转换
面试题分析
编写代码实现:字符串循环右移,如:“abcdefg” 循环右移 3 位得到 “efgabcd”
关于 string 类中的两个成员函数
length: 用于获取字符串的长度
substr(startpos): 从 startpos 位置开始截取字符串
substr(startpos, length): 从 startpos位置开始截取 length 长度的字符串
实验代码
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
string chr_right_move(string s, int n)
{
int len = s.length();
int pos = n % len;
string tmp = s.substr(pos);
tmp += s.substr(0, pos);
return tmp;
}
string operator >> (string s, int n)
{
int len = s.length();
int pos = n % len;
string tmp = s.substr(pos);
tmp += s.substr(0, pos);
return tmp;
}
int main()
{
string s = chr_right_move("helloworld", 3);
cout << s << endl;
string s1 = "abcdefghijk";
s1 = s1 >> 4;
cout << s1 << endl;
return 0;
}
运行结果
实验结果:chr_right_move 函数实现了将字符串右移的功能,同样重载 >> 操作符函数也同样实现了字符串右移功能,使用更方便。
小结
应用开发中 大多数的情况 都在进行 字符串处理
C++ 中 没有直接支持 原生的字符串类型
标准库中通过 string 类支持字符串的概念
string 类支持 字符串 和 数字 的相互转换
string 类的应用 使得问题的求解变得简单