标准C++提供了两种字符串:一是C风格的以“\0”字符结尾的字符数组,二是字符串类String。而Qt字符串类QString功能更强大。
QString类保存16位Unicode值,提供了丰富的操作、查询、转换等函数。该类还进行了使用隐式共享、高效的内存分配策略等多方面的优化。
1)字符串操作
与C++中的String字符串类一样,QString也提供了“+”和“+=”操作符号来符合两个字符串。
QString str1 = "welcome ";
str1 = str1 + "to you !";
QString str2 = "hello, ";
str2 += "world";
其中,QString str1 = "welcome"传递给QString一个const char*类型的ASCII字符串“welcom”,它被解释为一个典型的以“\0”结尾的C类型字符串。这将会导致调用QString构造函数,来初始化一个QString字符串,其构造函数原型为:
QT_ASCII_CAST_WARN_CONSTRUCTOR QString::QString(const char* str)
被传递的const char*类型的指针又会被函数QString::fromAscii()转换为Unicode编码。默认情况下,函数QString::fromAscii()会把超过128的字符作为Latin-1进行处理(可以通过调用QTextCode::setCodecForString()函数改变QString::fromAsci()函数的处理方式)。
此外,在编译应用程序的时候,也可以通过定义QT_CAST_FROM_ASCII宏变量屏蔽掉该构造函数。如果程序员要求显示给用户的字符串都必须经过QObject::tr()函数的处理,那么屏蔽掉QString的这个构造函数式非常有用的。
QString::append()函数具有和“+=”操作符一样的功能。
QString str1 = “welcome ”;
QString str2 = “to ”;
str1.append(str2);
str1.append("you !");
QString str;
str.sprintf("%s"," welcome");
str.sprintf("%s"," to you ");
str.sprintf("%s %s","welcome ","to you");
QString str1;
str1 = QString("%1 is %2").arg("tom").arg("boy");//str1="tom is boy"
QString str2;
str2 = QString("%2 is %1").arg("tom").arg("boy");//str2="boy is tom"
1.insert():在原字符串特定的位置插入另一个字符串;
2.prepend():在原字符串的开头插入另一个字符串;
3.replace():用指定的字符串代替原字符串中的某些字符
Qt也提供了去除字符串中空白字符的函数
1.QString::trimmed()函数:移除字符串两端的空白字符
2.QString::simplified()函数:移除字符串两端的空白字符,使用单个空格字符“ ”代替字符串中出现的空白字符。
2)查询字符串数据
1.QString::startsWith()判断一个字符串是否以某个字符串开头。此函数具有两个参数,第一个参数指定了一个字符串,第二个参数指定是否大小写敏感(默认情况下,是大小写敏感的)
QString str = "Welcome to You"
str.startsWith("Welcome",Qt::CaseSensitive);//return true
str.startsWith("you",Qt::CaseSensitive);//return false
3.QString::contains()判断一个指定的字符串是否出现过。
4.QString也提供了>,<,<=,>=操作符来对字符串进行比较
5.localeAwareCompare(const QString&,const QString &):静态函数,比较前后两个字符串,如果小于则返回负整数值;如果等于则返回0;如果大于则返回正整数值。该函数的比较是基于本地(locale)字符集的,而且是平台相关的。通常该函数用于向用户显示一个有序的字符串列表。
6.compare(const QString&,const QString&,Qt::CaseSensitive):该函数可以指定是否进行大小写的比较,而大小写的比较是完全基于字符的Unicode编码值的,而且是非常快的,返回值类似于localeAwareCompare()函数。
3)字符串的转换
QString::toInt() , QString::toDouble() , QString::toFloat() , QString:toLong() , QString::toLongLong()等。
QString str = "125";
bool ok;
int hex = str.toInt(&ok,16);//293
int dec = str.toInt(&ok,10);//125