概述
C++中的字符串类
一、历史遗留问题
- C语言不支持真正意义上的字符串
- C语言用字符数组和一维函数实现字符串操作
- C语言不支持自定义类型,因此无法获得字符串类型
二、解决方案
- 从C到C++的进化过程引入了自定义类型
- 在C++中可以通过类完成字符串类型的定义
问题:
C++中的原生类型系统是否包含字符串类型?
三、标准库中的字符串类
- C++语言直接支持C语言的所有概念
- C++语言中没有原生的字符串类型
- C++标准库提供了string类型
- string直接支持字符串连接
- string直接支持字符串的大小比较
- string直接支持子串查找和提取
- string直接支持字符串和插入和替换
四、编程实验
//字符串类的使用
//33-1.cpp
#include <iostream>
#include <string>
using namespace std;
void string_sort(string a[], int len)
{
for(int i = 0; i < len; i++)
{
for(int j = i; j < len; j++)
{
if(a[i] > a[j])
{
swap(a[i], a[j]);
}
}
}
}
string string_add(string a[], int len)
{
string ret = "";
for(int i = 0; i < len; i++)
{
ret += a[i] + "; ";
}
return ret;
}
int main()
{
string sa[7]=
{
"Hello World",
"D.T.Software",
"C#",
"Jave",
"C++",
"Python",
"TypeScript"
};
string_sort(sa, 7);
for(int i = 0; i < 7; i++)
{
cout << sa[i] << endl;
}
cout << endl;
cout << string_add(sa, 7) << endl;
return 0;
}
//编译运行
$ a.out
C#
C++
D.T.Software
Hello World
Jave
Python
TypeScript
C#; C++; D.T.Software; Hello World; Jave; Python; TypeScript;
五、标准库中的字符串类
-
字符串与数字的转换
- 标准库中提供了相关的类对字符串和数字进行转换
- 字符串流类(
sstream
)用于string的转换<sstream>
——相关头文件istringstream
——字符串输入流ostringstream
——字符串输出流
-
使用方法
-
string->数字
istringstream iss("123.45"); double num; iss >> num;
-
数字->string
ostringstream oss; oss << 543.21; string s = oss.str();
六、编程实验
//字符串和数字的转换——暂用宏实现 33-2.cpp #include <iostream> #include <string> #include <sstream> using namespace std; #define TO_NUMBER(s, n) (istringstream(s) >> n) #define TO_STRING(n) (((ostringstream&)(ostringstream() << n)).str()) /* bool to_number(const string& s, int& n) { istringstream iss(s); return iss >> n; } bool to_number(const string& s, doubel& n) { istringstream iss(s); return iss >> n; } string to_string(int n) { return ((ostringstream&)(ostringstream() << n)).str(); } */ int main() { /* int n = 0; cout << to_number("234", n) << endl; cout << n << endl; */ int n = 0; double m = 0; if(TO_NUMBER("123", n)) { cout << n << endl; } if(TO_NUMBER("123.456", m)) { cout << m << endl; } string l = TO_STRING(1234.995); cout << l << endl; istringstream iss("1234.56"); //istringstream iss("aaaaa"); double num; if(iss >> num) { cout << num <<endl; } ostringstream oss; // oss << 543.21; oss << 543 << "." << 21; string s = oss.str(); cout << s << endl; return 0; } //编译运行 $ a.out 123 123.456 1234.99 1234.56 543.21
-
六、面试题分析
- 字符串循环右移
- 示例:
- abcdefg循环右移3位后得到efgabc
- 示例:
//33-3.cpp
#include<iostream>
#include<string>
using namespace std;
//string right_func(const string& s, unsigned int n)
string operator >> (const string& s, unsigned int n)
{
string ret = "";
unsigned int pos = 0;
n = n % s.length();
pos = s.length() - n;
ret = s.substr(pos);
ret += s.substr(0, pos);
return ret;
}
int main()
{
//string r = right_func("abcdefg", 8);
string s = "abcdefg";
string r = (s >> 3);
cout << r <<endl;
return 0;
}
七、小结
- 应用开发中大多数情况都在进行字符串处理
- C++中没有直接支持原生态的字符串类型
- 标准库中通过string类支持字符串的概念
- string类支持字符串和数字的互相转换
- string类的应用使得问题的求解变得简单
八、课后练习
- 字符串反转
- 要求
- 使用string类完成
- 示例
- “we;tonight;you”->“ew;thginot;uoy”
- 提示
- string类中提供了成员函数可以查找目标字符的位置
- 要求
最后
以上就是苹果戒指为你收集整理的C++中的字符串类C++中的字符串类的全部内容,希望文章能够帮你解决C++中的字符串类C++中的字符串类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复