| 主页 | 所有的类 | 主要的类 | 注释的类 | 分组的类 | 函数 |
QCString类提供了一个经典C语言的以零结尾的字符数组(char *)的抽象。 详情请见……
#include <qcstring.h>
继承了QByteArray。
QCString类提供了一个经典C语言的以零结尾的字符数组(char *)的抽象。
QCString继承了QByteArray,后者是被QMemArray<char>这样定义的。
因为QCString是一个QMemArray,它使用了带引用计数的明显共享。
你可以在从不暴露给用户的文本中使用QCString。对于用户可见的文本,你应该使用QString(它提供隐含共享、Unicode和其它国际化支持。
注意QCString是Qt中比较薄弱的类,它的设计是有缺陷的(它试图在行为上变为更方便的const char *)并且作为结果,QCString使用的所有算法经常执行得很差。例如,因为append()扫描一个零结束符,所以它是O(length()),这也严重地影响着很多使用QCString的算法。
注意对于使用const char *参数的QCString的方法,如果QCString不是以零结尾的,结果是不确定的。const char *参数为0是合法的。
没有分配任何事物的QCString是零,也就是长度和数据指针都是0。一个引用空字符串(“”,单一的'\0'字符)的QCString是空。在方法中,零和空QCString都是合法参数。把const char * 0分配给QCString就给定了一个零QCString。
length()函数返回字符串的长度,resize()重新定义字符串的大小并且truncate()截短字符串。字符串可以使用fill()来用一个字符填充。使用leftJustify()和rightJustify()在字符串的左面或者右面填补字符。使用find()和findRev()可以搜索字符、字符串和正则表达式,并且使用contains()来计数。
字符串和字符可以通过insert()来插入并且通过append()来添加。字符串可以通过prepend()在前面添加。字符串中的字符可以通过remove()来移除并且通过replace()来替换。
字符串的一部分可以使用left()、right()和mid()来提取。空白符号可以使用stripWhiteSpace()和simplifyWhiteSpace()来移除。字符串可以使用upper()和lower()分别转换为大写或小写。
包含数字的字符串可以使用toShort()、toInt()、toLong()、toULong()、toFloat()和toDouble()来被转换为数字。数字可以使用setNum()来被转换为字符串。
很多操作符被重载以用来为QCString工作。QCString也支持更多的不明显的功能,例如sprintf()、setStr()和setExpand()。
在字符比较上请注意
在QCString中,大写和小写的字符大于或者小于另一个依赖于本地的字符。这个影响支持不区分大小写选项的或者比较大写或者小写参数的函数。如果两个字符串都只包含ACSII码,不区分大小写的操作和比较将是正确的。(如果$LC_CTYPE被设置,绝大多数Unix系统都会做“正确的事情”。)受这个影响的函数包括contains()、find()、findRev()、operator<()、operator<=()、operator>()、operator>=()、lower()和upper()。
性能注意:使用QRegExp进行搜索的QCString方法通过把QCString转换为QString来重新实现的并且在它上面执行搜索的。这意味着QCString数据的深复制。如果你要在一个大的QCString中执行许多QRegExp的搜索,你最好自己把QCString转换为QString并且在QString中进行搜索可以得到更好的执行效果。
也可以参考集合类、隐含和明显共享类、文本相关类和非图形用户界面类。
也可以参考isNull()。
如果size > 0,那么字符串的第一个和最后一个字符被初始化为'\0'.。所有其它字符没有被初始化。
也可以参考assign()。
如果str0,那么零字符串被创建。
也可以参考isNull()。
实例:
QCString str( "helloworld", 6 ); // 把“hello”分配给str
如果str在开始的maxsize字节中包含一个0字节,那么结果QCString将被这个0结束。如果str0,那么零字符串被创建。
也可以参考isNull()。
如果cs为真,匹配就区分大小写,或者如果cs为假,就不区分大小写。
也可以参考Note on character comparisons。
返回字符串中str出现的次数。
如果cs为真,匹配就区分大小写,或者如果cs为假,就不区分大小写。
这个函数对子字符串重叠计数,例如,“banana”包含两个“ana”。
也可以参考findRev()和Note on character comparisons。
字符串中rx出现的重叠计数。
实例:
QString s = "banana and panama";
QRegExp r = QRegExp( "a[nm]a", TRUE, FALSE );
s.contains( r ); // 4个匹配项
也可以参考detach()。
如果len为负数,那么当前的字符串长度被使用。
返回假就是len为非负数并且没有足够的空间来重新定义字符串的大小,否则就返回真。
如果cs为真,搜索是区分大小写的,否则如果cs为假,就不区分大小写。
返回c的位置,或者如果c没有被发现,返回-1。
也可以参考Note on character comparisons。
实例:network/networkprotocol/nntp.cpp。
在字符串中从index位置开始,找到字符串str第一次出现的位置。
如果cs为真,搜索是区分大小写的,否则如果cs为假,就不区分大小写。
返回str的位置,或者如果str没有被发现,返回-1。
也可以参考Note on character comparisons。
在字符串中从index位置开始,找到正则表达式rx第一次出现的位置。
返回下一个匹配的位置,如果rx没有被发现,返回-1。
如果cs为真,搜索是区分大小写的,否则如果cs为假,就不区分大小写。
返回c的位置,或者如果c没有被发现,返回-1。
也可以参考Note on character comparisons。
在字符串中从index位置开始并且反向搜索,找到字符串str第一次出现的位置。
如果cs为真,搜索是区分大小写的,否则如果cs为假,就不区分大小写。
返回str的位置,或者如果str没有被发现,返回-1。
也可以参考Note on character comparisons。
在字符串中从index位置开始并且反向搜索,找到正则表达式rx第一次出现的位置。
返回下一个匹配的位置(反向),如果rx没有被发现,返回-1。
如果index超出字符串的结尾,字符串被使用空格(ASCII 32)延伸到index长度,然后c被添加。
实例:
QCString s = "Yes";
s.insert( 3, '!'); // s == "Yes!"
在字符串的index位置插入字符串s并且返回字符串的引用。
如果index超出字符串的结尾,字符串被使用空格(ASCII 32)延伸到index长度,然后s被添加。
QCString s = "I like fish";
s.insert( 2, "don't "); // s == "I don't like fish"
s = "x"; // index 01234
s.insert( 3, "yz" ); // s == "x yz"
如果字符串为空,例如如果length() == 0,返回真。空字符串不总是零字符串。
请参考isNull()中的实例。
也可以参考isNull()、length()和size()。
实例:
QCString a; // a.data() == 0, a.size() == 0, a.length() == 0
QCString b == ""; // b.data() == "", b.size() == 1, b.length() == 0
a.isNull(); // TRUE,因为a.data() == 0
a.isEmpty(); // TRUE,因为a.length() == 0
b.isNull(); // FALSE,因为 b.data() == ""
b.isEmpty(); // TRUE,因为b.length() == 0
也可以参考isEmpty()、length()和size()。
如果len超过字符串的长度,则整个字符串被返回。
实例:
QCString s = "Pineapple";
QCString t = s.left( 4 ); // t == "Pine"
实例:network/networkprotocol/nntp.cpp。
如果truncate为假并且字符串的长度超过width,那么返回的字符串是这个字符串的复制。
如果truncate为真并且字符串的长度超过width,那么返回的字符串是left(width)。
实例:
QCString s("apple");
QCString t = s.leftJustify(8, '.'); // t == "apple..."
也可以参考rightJustify()。
零字符串和空字符串长度都为零。
也可以参考size()、isNull()和isEmpty()。
实例:network/networkprotocol/nntp.cpp。
实例:
QCString s("Credit");
QCString t = s.lower(); // t == "credit"
也可以参考upper()和Note on character comparisons。
如果这个字符串为空或者index超出范围,返回零。如果index+len超过这个字符串的长度,返回从index开始的整个字符串。
实例:
QCString s = "Two pineapples";
QCString t = s.mid( 4, 3 ); // t == "pin"
实例:network/networkprotocol/nntp.cpp。
把字符c添加到字符串中并且返回结果的引用。
把str的一个深度复制赋值给这个字符串并且返回这个字符串的引用。
如果str为0,一个零字符串就被创建。
也可以参考isNull()。
在字符串开始处插入s并且返回这个字符串的引用。
也可以参考insert()。
如果index超出字符串的长度,就什么也不发生。如果index在字符串中间,但是index加上len超过字符串的结尾,这个字符串将从index开始被截短。
QCString s = "Montreal";
s.remove( 1, 4 );
// s == "Meal"
实例:network/networkprotocol/nntp.cpp。
如果index超出字符串的长度,就什么也不被删除并且s被添加到字符串结尾。如果 index有效并且index加上len超过字符串的结尾,那么这个字符串将从index开始被截短,并且str被添加到字符串结尾。
QCString s = "Say yes!";
s.replace( 4, 3, "NO" ); // s == "Say NO!"
用str替换字符串中出现的每一个正则表达式rx。返回这个字符串的引用。
实例:
QString s = "banana";
s.replace( QRegExp("a.*a"), "" ); // 变为“b”
s = "banana";
s.replace( QRegExp("^[bn]a"), " " ); // 变为“ nana”
s = "banana";
s.replace( QRegExp("^[bn]a"), "" ); // 注意!变为“”
最后一个例子可能很令人惊奇。正则表达式的语义重复地应用于这个字符串,所以首先最开始的“ba”被移除了,接着是“na”,然后是最后的“na”,剩下的就是一个空字符串了。
'\0'结束符被设置在len - 1位置,除非len == 0。
实例:
QCString s = "resize this string";
s.resize( 7 ); // s == "resize"
也可以参考truncate()。
实例:network/networkprotocol/nntp.cpp。
如果len超过字符串的长度,则整个字符串被返回。
实例:
QCString s = "Pineapple";
QCString t = s.right( 5 ); // t == "apple"
实例:network/networkprotocol/nntp.cpp。
如果truncate为假并且字符串的长度超过width,那么返回的字符串是这个字符串的复制。
如果truncate为真并且字符串的长度超过width,那么返回的字符串是right(width).。
实例:
QCString s("pie");
QCString t = s.rightJustify(8, '.'); // t == ".....pie"
也可以参考leftJustify()。
如果index超出范围并且如果字符串不能被扩大,返回假,否则为真。
字符表示的格式由格式字符f指定,并且精度(小数点之后的位数)由prec指定。
有效的f的格式为'e'、'E'、'f'、'g'和'G'。和sprintf()的格式相同,在QString::arg()中有它们的解释。
设置字符串为数字n的字符表示并且返回字符串的引用。
设置字符串为数字n的字符表示并且返回字符串的引用。
设置字符串为数字n的字符表示并且返回字符串的引用。
设置字符串为数字n的字符表示并且返回字符串的引用。
设置字符串为数字n的字符表示并且返回字符串的引用。
设置字符串为数字n的字符表示并且返回字符串的引用。
空白符号是指十进制ASCII码为9、10、11、12、13和32。
QCString s = " lots\t of\nwhite space ";
QCString t = s.simplifyWhiteSpace(); // t == "lots of white space"
也可以参考stripWhiteSpace()。
如果字符串小于256字符,这个sprintf()调用resize(256)来减少内存的占用。在sprintf()返回之前,字符串被重新定义为它实际的长度。
实例:
QCString s;
s.sprintf( "%d - %s", 1, "first" ); // result < 256 字符
QCString big( 25000 ); // 很长的字符串
big.sprintf( "%d - %s", 2, longString ); // result < 25000 字符
警告: limit. 如果format规格和参数比目标字符串常,所有的vsprintf()实现将会越过目标字符串(*this)进行写操作,并且如果目标字符串比一些任意实现限制长,会有一些失败。
把用户给定的参数传给sprintf()会导致一些问题。迟早会有一些人将会把3000个字符的行传给你的应用程序。
空白符号是指十进制ASCII码为9、10、11、12、13和32。
实例:
QCString s = " space ";
QCString t = s.stripWhiteSpace(); // t == "space"
也可以参考simplifyWhiteSpace()。
如果转化发生错误,*ok被设置为假(除非ok为0,这是默认的)并且0被返回。否则*ok被设置为真。
如果转化发生错误,*ok被设置为假(除非ok为0,这是默认的)并且0被返回。否则*ok被设置为真。
如果转化发生错误,*ok被设置为假(除非ok为0,这是默认的)并且0被返回。否则*ok被设置为真。
如果转化发生错误,*ok被设置为假(除非ok为0,这是默认的)并且0被返回。否则*ok被设置为真。
如果转化发生错误,*ok被设置为假(除非ok为0,这是默认的)并且0被返回。否则*ok被设置为真。
如果转化发生错误,*ok被设置为假(除非ok为0,这是默认的)并且0被返回。否则*ok被设置为真。
如果转化发生错误,*ok被设置为假(除非ok为0,这是默认的)并且0被返回。否则*ok被设置为真。
如果转化发生错误,*ok被设置为假(除非ok为0,这是默认的)并且0被返回。否则*ok被设置为真。
等于调用resize(pos+1)。
实例:
QCString s = "truncate this string";
s.truncate( 5 ); // s == "trunc"
也可以参考resize()。
实例:
QCString s( "Debit" );
QCString t = s.upper(); // t == "DEBIT"
也可以参考lower()和Note on character comparisons。
等于qstrcmp(s1, s2) != 0。
如果s1和s2不同,返回真,否则返回假。
等于qstrcmp(s1, s2) != 0。
如果s1和s2不同,返回真,否则返回假。
等于qstrcmp(s1, s2) != 0。
返回由s1和s2串联组成的字符串。
返回由s1和s2串联组成的字符串。
返回由s和c串联组成的字符串。
返回由c和s串联组成的字符串。
等于qstrcmp(s1, s2) < 0。
也可以参考有关字符比较的注意。
如果s1小于s2,返回真,否则返回假。
等于qstrcmp(s1, s2) < 0。
也可以参考有关字符比较的注意。
也可以参考QDataStream操作符的格式。
等于qstrcmp(s1, s2) <= 0。
也可以参考有关字符比较的注意。
如果s1小于等于s2,返回真,否则返回假。
等于qstrcmp(s1, s2) <= 0。
也可以参考有关字符比较的注意。
等于qstrcmp(s1, s2) == 0。
如果s1和s2相等,返回真,否则返回假。
等于qstrcmp(s1, s2) == 0。
如果s1和s2相等,返回真,否则返回假。
等于qstrcmp(s1, s2) == 0。
等于qstrcmp(s1, s2) > 0。
也可以参考有关字符比较的注意。
如果s1大于s2,返回真,否则返回假。
等于qstrcmp(s1, s2) > 0。
也可以参考有关字符比较的注意。
等于qstrcmp(s1, s2) >= 0。
也可以参考有关字符比较的注意。
如果s1大于等于s2,返回真,否则返回假。
等于qstrcmp(s1, s2) >= 0。
也可以参考有关字符比较的注意。
也可以参考QDataStream操作符的格式。
这个函数通常是C库的一部分。Qt为不支持它的平台实现了memmove()。
memmove()从src中复制len字节到dst。甚至src重叠dst,数据都可以被正确复制。
一个安全的strcmp()函数。
比较str1和str2。如果str1小于str2,返回一个负值,如果str1等于str2,返回0或者如果str1大于str2返回一个正值。
特例一:如果str1和str2都为零,返回0。
特例二:如果str1为零或者str2为零(但不全是),返回一个随机非零值。
也可以参考qstrncmp()、qstricmp()、qstrnicmp()和有关字符比较的注意。
一个安全的strcpy()函数。
把src中一直到'\0'的字符(包含它)的字符复制到dst中并且返回dst的指针。
返回一个复制的字符串。
为src的副本分配空间,复制并且返回副本的指针。如果src为零,它立即返回0。
返回的字符串需要使用delete[]来删除。
一个安全的stricmp()函数。
忽略大小写比较str1和str2。
如果str1小于str2,返回一个负值,如果str1等于str2,返回0或者如果str1大于str2返回一个正值。
特例一:如果str1和str2都为零,返回0。
特例二:如果str1为零或者str2为零(但不全是),返回一个随机非零值。
也可以参考qstrcmp()、qstrncmp()、qstrnicmp()和有关字符比较的注意。
一个安全的strncmp()函数。
比较str1和str2一直到len字节。
如果str1小于str2,返回一个负值,如果str1等于str2,返回0或者如果str1大于str2返回一个正值。
特例一:如果str1和str2都为零,返回0。
特例二:如果str1为零或者str2为零(但不全是),返回一个随机非零值。
也可以参考qstrcmp()、qstricmp()、qstrnicmp()和有关字符比较的注意。
一个安全的strncpy()函数。
从src中复制一直到len字节的全部字符(或者如果src更短就更少)复制到dst中并且返回dst的指针。保证dst是'\0'结尾的。如果src或dst为零,立即返回0。
也可以参考qstrcpy()。
一个安全的strnicmp()函数。
忽略大小写,比较str1和str2一直到len字节。
如果str1小于str2,返回一个负值,如果str1等于str2,返回0或者如果str1大于str2返回一个正值。
特例一:如果str1和str2都为零,返回0。
特例二:如果str1为零或者str2为零(但不全是),返回一个随机非零值。
也可以参考qstrcmp()、qstrncmp()、qstricmp()和有关字符比较的注意。
这个文件是Qt工具包一部分。 版权所有 © 1995-2002 Trolltech。保留所有权利。
| Copyright © 2002 Trolltech | Trademarks | 译者:Cavendish | Qt 3.0.5版
|