- C语言不支持真正意义上的字符串
- C语言用字符数组和一组函数实现字符串操作
- C语言不支持自定义类型,因此无法获得字符串类型
-
从C到C++的进化过程引入了自定义类型
-
在C++中可以通过类完成字符串类型的定义
C++中的原生类型系统是否包含字符串类型?
- STL是意义上需要与C++一同发布的标准库
- STL是一套以模板技术完成的C++类库
- STL中包含了常用的算法和数据结构
- STL中包含了字符串类
-
STL的具体实现依赖于编译器生产厂商
-
STL的 “标准” 只是其接口是标准的
- 相同的全局函数
- 相同的算法类和数据结构类
- 相同的类成员函数
-
不同厂商的编译器所带的STL存在差异
依赖于STL开发的C++程序在不同平台上的行为可能出现差异
- 项目是否需要使用现库的支持?
- STL?Qt?MFC?私有库?
- 项目是否需要在不同平台间移植?
- Linux?Windows?Android?
- 项目是否需要图形用户界面?
- GUI应用程序?命令行应用程序?后台服务程序?
- Qt中的字符串类
- 采用Unicode编码
- 使用隐式共享技术来节省内存和不必要的数据拷贝
- 跨平台使用,不必考虑字符串的平台兼容性
- QString直接支持字符串和数字的相互转换
- QString直接支持字符串的大小比较
- QString直接支持不同字符编码间的相互转换
- QString直接支持std::string和std::wstring的相互转换
- QString直接支持正则表达式的应用
- 。。。
#includeQt中的QStringvoid Sample_1() { QString s = "add"; s.append(" "); // "add " s.append("Qt"); // "add Qt" s.prepend(" "); // " add Qt" s.prepend("C++"); // "C++ add Qt" qDebug() << s; s.replace("add", "&"); // "C++ & Qt" qDebug() << s; } void Sample_2() { QString s = ""; int index = 0; s.sprintf("%d. I'm %s, thank you!", 1, "Delphi Tang"); // "1. I'm Delphi Tang, thank you!" qDebug() << s; index = s.indexOf(","); s = s.mid(0, index); // "1. I'm Delphi Tang" qDebug() << s; index = s.indexOf("."); s = s.mid(index + 1, s.length()); // " I'm Delphi Tang" s = s.trimmed(); // "I'm Delphi Tang" qDebug() << s; index = s.indexOf(" "); s = s.mid(index + 1, s.length()); // "Delphi Tang" qDebug() << s; } void Sample_3(QString* a, int len) { for(int i = 0; i < len; i++) { for(int j=i+1; j if( a[j] < a[i] ) { QString tmp = a[i]; a[i] = a[j]; a[j] = tmp; } } } } int main() { qDebug() << "Sample_1:"; Sample_1(); qDebug() << endl; qDebug() << "Sample_2:"; Sample_2(); qDebug() << endl; qDebug() << "Sample_3:"; QString company[5] = { QString("Oracle"), QString("Borland"), QString("Microsoft"), QString("IBM"), QString("D.T.Software") }; Sample_3(company, 5); for(int i = 0; i < 5; i++) { qDebug() << company[i]; } return 0; }
- QString在Qt库中几乎是无所不在的
- 所有的Qt图形用户组件都依赖于QString
// 之前代码中的内容
void QCalculatorUI::onButtonClicked()
{
QPushButton* btn = (QPushButton*)sender();
QString clickText = btn->text();
if ( clickText == "<-" ) {
QString text = m_edit->text();
if ( text.length() > 0 ) {
text.remove(text.length()-1, 1);
m_edit->setText(text);
}
}
else if ( clickText == "C" ) {
m_edit->setText("");
}
else if ( clickText == "=" ) {
}
else {
m_edit->setText(m_edit->text() + clickText);
}
}
小结
- 应用开发大多数的情况都在进行字符串处理
- Qt比STL更适合于跨平台开发的场景
- Qt中的QString比STL中string更强大易用
- Qt图形用户组件都依赖于QString
- 项目开发时需要综合各种选择需要使用的库



