1 C++中的字符串类简介
1.1 C语言中的遗留问题
历史遗留问题:
- C语言不支持真正意义上的字符串。
- C语言用字符数组和一组函数实现字符串操作。
- C语言不支持自定义类型,因此无法获得字符串类型。
解决方案:
- 从C到C++的进化过程中引入了自定义类型。
- 在C++中可以通过类完成字符串类型的定义。
1.2 C++中的字符串类
由于C++语言直接支持C语言的所有概念,所以C++中没有原生的字符串概念。
标准库中的字符串类:
- C++标准库提供了string类型
- string直接支持字符串连接
- string直接支持字符串大小的比较
- string直接支持字串查找和提取
- string直接支持字符串的插入和替换
string类最大限度的考虑了C字符串的兼容性,可以按照使用C字符串的方式使用string对象。

字符串类的使用:
#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#",
"Java",
"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;
}
2 C++中string类错误使用示例
C++中要么用string类,要么用C语言方式的字符串,不要混用,否则很容易出bug。
2.1 m_cstr的问题
下面的代码输出什么?为什么?

两次均输出"12345"。
问题分析:

string类通过一个数据空间保存字符数据。
2.2 m_length的问题
下面的程序输出什么?为什么?

输出为空。
问题分析:

string类通过一个成员变量保存当前字符串的长度。
C++开发时尽量避免C语言中管用的变成思想。
参考资料:
466

被折叠的 条评论
为什么被折叠?



