1 Qt中的字符串类
1.1 字符串的历史遗留问题
在C语言中:
- C语言不支持真正意义上的字符串。
- C语言用字符数组和一组函数实现字符串操作。
- C语言不支持自定义类型,因此无法获得字符串类型。
C++的解决方案:
- 从C到C++的进化过程中引入了自定义类型。
- 在C++中可以通过类完成字符串类型的定义。
- C++中的原生类型系统不包括字符串类型。
标准库STL中的字符串:
- STL是意义上需要与C++一同发布的标准库。
- STL是一套以模板技术完成的C++类库。
- STL中包含了常用的算法和数据结构。
- STL中包含了字符串类。
STL的缺陷:
- STL的具体实现依赖于编译器生产厂商。
- STL的“标准”只是其接口是标准的:
- 相同的全局函数。
- 相同的算法类和数据结构类。
- 相同的类成员函数。
- 不同厂商的编译器所带的STL存在差异。
- 依赖于STL开发的C++程序在不同平台上的行为可能出现差异!
那么我们开发中对于库的选择也需要有所考虑:
- 项目是否需要使用现有库的支持?
- STL?Qt?MFC?私有库?
- 项目是否需要在不同平台间移植?
- Linux?Windows?Android?
- 项目是否需要图形用户界面?
- GUI应用程序?命令行应用程序?后台服务程序?
1.2 Qt中的字符串类
Qt中的字符串类:
- 采用Unicode编码。
- 使用隐式共享技术来节省内存和不必要的数据拷贝。
- 跨平台使用,不必考虑字符串的平台兼容性。
- QString中的每个字符为QChar。
QString的优点:
- QString直接支持字符串和数字的相互转换。
- QString直接支持字符串的大小比较。
- QString直接支持不同字符编码间的相互转换。
- QString直接支持std::string和std::wstring的相互转换。
- QString直接支持正则表达式的应用。
QString总结:
- 应用开发中大多数的情况都在进行字符串处理。
- Qt比STL更适合于跨平台开发的场景。
- Qt中的QString比STL中的string更强大易用。
- Qt图形用户组件都依赖于QString。
- 项目开发时需要综合各种选择需要使用的库。
编程实验:QString基本操纵示例
#include <QDebug>
void 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<len; 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;
}
参考资料:
4929

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



