int a=xindexOf("\t"); //return 6
QString y = xleft(a);
首先是获得到\t的位置,然后获得指定位置的字符串你好!!!
举例:
t="CDEF"字符串s=“QTHRG”
首先编译器会把t的第一元素和s的第一个元素比较,要是前者大于后者,比较就结束,返回一个大于o的数,要是后者大于前者,返回小于0 的数,要是相等,就把t的第2元素和s的第2个元素比较,重复刚才的过程。
t的第一个元素是‘c’,显然没有‘Q’,那就比较结束,返回一个小于0的数。
比较规则:字符串比较函数strcmp的比较,两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。
描述:C 库函数 int strcmp(const char str1, const char str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较。
声明: int strcmp(const char str1, const char str2) 是 strcmp() 函数的声明。
参数:str1 -- 要进行比较的第一个字符串。str2 -- 要进行比较的第二个字符串。
扩展资料:
相关使用说明:
特别注意:strcmp(const char s1,const char s2)这里面只能比较字符串,即可用于比较两个字符串常量,或比较数组和字符串常量,不能比较数字等其他形式的参数。如:"A"<"B" 2"A"<"AB" 3"Apple"<"Banana" 4"A"<"a" 5"compare"<"computer"
ANSI标准规定,返回值为正数,负数,0 。而确切数值是依赖不同的C实现的。当两个字符串不相等时,C标准没有规定返回值会是1 或 -1,只规定了正数和负数。有些会把两个字符的ASCII码之差作为比较结果由函数值返回。但无论如何不能以此条依据作为程序中的流程逻辑。
参考资料来源:百度百科-strcmp
QString 类中各函数的作用。 一、字符串连接函数。 1、QString也重载的+和+=运算符。这两个运算符可以把两个字符串连接到一起。 2、QString的append()函数则提供了类似的 *** 作Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换Qt再使用第三方开源库时,由于库的类型基本上都是标准的类型,字符串遇的多的就是Char类型
在Qt下怎样将QString转char呢,需要用到QByteArray类,QByteArray类的说明详见Qt帮助文档。
因为char最后都有一个‘/0’作为结束符,而采用QString::toLatin1()时会在字符串后面加上‘/0’
方法如下:
Qstring str;
char ch;
QByteArray ba = strtoLatin1();
ch=badata();
这样就完成了QString向char的转化。经测试程序运行时不会出现bug
注意第三行,一定要加上,不可以strtoLatin1()data()这样一部完成,可能会出错。
补充:以上方法当QString里不含中文时,没有问题,但是QString内含有中文时,转换为char就是乱码,采用如下方法解决:
方法1:
添加GBK编码支持:
#include <QTextCodec>
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
然后改变上面的第三行为:QByteArray ba = strtoLoacl8Bit(); toLoacl8Bit支持中文
方法2:
先将QString转为标准库中的string类型,然后将string转为char,如下:
std::string str = filenametoStdString();
const char ch = strc_str();1、QString
2、QVariant
3、QStringList
4、QVector
5、QStack
6、QQueue
7、QList
8、QMap
QString 是qt中关于String的封装类,用于处理字符串。
'''
void testQString(){
QString str1="hello";
qDebug()<<str1;
str1append("word");
qDebug()<<str1;//"hello word"
qDebug()<<str1indexOf("word");//5
QString str2="Hello";
qDebug()<<str2;
str2fill('x');//"xxxxx"
qDebug()<<str2;
str2fill('x',2);//"xx"
qDebug()<<str2;
qDebug()<<QString()isEmpty();//true
qDebug()<<QString("")isEmpty();//true
qDebug()<<QString(" ")isEmpty();//false
qDebug()<<QString("abc")isEmpty();//false
qDebug()<<QString()isNull();//true
qDebug()<<QString("")isNull();//false
qDebug()<<QString(" adc")isNull();//false
QString str3="Hello";
qDebug()<<str3;
qDebug()<<str3left(3);//"hel"
qDebug()<<str3mid(2,2);//"ll"
qDebug()<<str3mid(2);//"llo"
qDebug()<<str3right(4);//"ello"
QString str4="hello word";
qDebug()<<str4;//"hello word"
str4remove(5,6);
qDebug()<<str4;//"hello"
QString str5="hello word";
str5insert(5,QString("word"));
qDebug()<<str5;//"hello wordword"
QString str6="hello word";
QString re="you";
str6replace("word",re);
qDebug()<<str6;//"hello you"
QString path="/user/local/bin/mapp";
qDebug()<<path;//"/user/local/bin/mapp"
QStringList list=pathsplit('/',QString::SkipEmptyParts);
qDebug()<<list;//("user,"local","bin","mapp")
QString str7="hello word";
qDebug()<<str7startsWith("hello");//true
qDebug()<<str7endsWith("word");//true
qDebug()<<QString("hello %1,helo you %2 ")arg("word")arg("hmf");//hello word,hello you hmf
qDebug()<<QString::localeAwareCompare("xxx","XXX");//-1
}
'''
QVariant 是万能变量,可以存取各种变量。
'''
void testQVariant(){
QVariant var;
varsetValue(QString("hello word"));
qDebug()<<var;//QVariant(QString, "hello word")
QString data=vartoString();
qDebug()<<data;//"hello word"
// varclear();
varsetValue(100);
qDebug()<<var;//QVariant(int, 100)
int d=vartoInt();
qDebug()<<d;//100
}
'''
QStringList 是存储QString类型的列表。
'''
void testQStringList(){
QStringList stL;
stL<<"str1"<<"str2"<<"str3"<<"str4";
qDebug()<<stL;//("str1", "str2", "str3", "str4")
QString str1=stLjoin("/");
qDebug()<<str1;//"str1/str2/str3/str4"
qDebug()<<stLcontains("str1");//true
qDebug()<<stLindexOf("str2");//1
stLappend("str3");
stLappend("str4");
qDebug()<<stL;//("str1", "str2", "str3", "str4", "str3", "str4")
stLremoveDuplicates();
qDebug()<<stL;//("str1", "str2", "str3", "str4")
//遍历方法1
for (int i=0;i<stLsize();i++){
qDebug()<<stLat(i);
}
//遍历方法2
QStringList::Iterator itr;
for(itr=stLbegin();itr!=stLend();++itr){
qDebug()<<itr;
}
}
'''
QVector 数组的模板类,本质是动态数组,存储方式是一片连续的内存空间。
'''
void testQVector(){
QVector<QString> tV;
tVappend("Str1");
tVappend("str2");
tVappend("str3");
tVappend("str4");
qDebug()<<tV;//QVector("Str1", "str2", "str3", "str4")
tVprepend("str0");
qDebug()<<tV;//QVector("str0", "Str1", "str2", "str3", "str4")
tVpush_back("str5");
qDebug()<<tV;//QVector("str0", "Str1", "str2", "str3", "str4", "str5")
tVpush_front("str00");
qDebug()<<tV;//QVector("str00", "str0", "Str1", "str2", "str3", "str4", "str5")
for(int i=0;i<tVsize();i++){
qDebug()<<tVat(i);
}
QVector<QString>::Iterator itr;
for(itr=tVbegin();itr!=tVend();itr++){
qDebug()<<itr;
}
qDebug()<<tVisEmpty();//false
qDebug()<<tVat(0);//"str00"
qDebug()<<tVvalue(3);//"str2"
qDebug()<<tVsize();//7
tVpop_back();
qDebug()<<tV;//QVector("str00", "str0", "Str1", "str2", "str3", "str4")
tVpop_front();
qDebug()<<tV;//QVector("str0", "Str1", "str2", "str3", "str4")
}
'''
QStack为qt中的栈模板类,继承于QVector,具有后进先出的特性。
'''
void testQStack(){
QStack<QString> stack;
stackpush("str1");
stackpush("str2");
stackpush("str3");
stackpush("str4");
qDebug()<<stack;//QVector("str1", "str2", "str3", "str4")
qDebug()<<stackpop();//"str4"
qDebug()<<stack;//QVector("str1", "str2", "str3")
qDebug()<<stacktop();//"str3"
qDebug()<<stack;//QVector("str1", "str2", "str3")
qDebug()<<stackisEmpty();//false
qDebug()<<stacksize();//3
while(!stackisEmpty())
{
qDebug()<<stackpop();
}
}
'''
QQueue 是qt中的队列的模板类,同样继承自QVector,具有先进先出的特性。
'''
void testQueue()
{
QQueue<QString> qq;
qqenqueue("str1");
qqenqueue("str2");
qqenqueue("str3");
qqenqueue("str4");
}
'''
QList是qt中的链表的实现,同时可以按位置索引和快速插入删除数据。
'''
void testList(){
QList<QString> ql;
qlappend("str");
qlappend("str1");
qlappend("str2");
qlappend("str3");
qlappend("str4");
qlappend("str5");
qDebug()<<ql;//("str", "str1", "str2", "str3", "str4", "str5")
for(int i=0;i<qlsize();i++){
qDebug()<<qlat(i);
}
QList<QString>::Iterator itr;
for(itr=qlbegin();itr!=qlend();itr++){
qDebug()<<itr;
}
qlpop_back();
qDebug()<<ql;//("str", "str1", "str2", "str3", "str4")
qlpop_front();
qDebug()<<ql;//("str1", "str2", "str3", "str4")
qDebug()<<qlsize();//4
qDebug()<<qlisEmpty();//false
}
'''
QMap 是qt中映射的模板类。就是字典。
'''
void testMap()
{
QMap<QString,int> map;
map["one"]=1;
mapinsert("two",2);
map["three"]=3;
map["four"]=4;
map["five"]=5;
qDebug()<<map;//QMap(("five", 5)("four", 4)("one", 1)("three", 3)("two", 2))
qDebug()<<mapvalue("one");//1
qDebug()<<map["two"];//2
qDebug()<<mapcontains("two");//true
qDebug()<<mapkeys();//("five", "four", "one", "three", "two")
qDebug()<<mapvalues();//(5, 4, 1, 3, 2)
//数据遍历
QMapIterator<QString ,int> itr(map);
while(itrhasNext()){
itrnext();
qDebug()<<itrkey()<<itrvalue();
}
}
'''java中的字符串比较方法:1)string1equals(string2)2)str1==str2。java中字符串的比较是==比较引用,equals比较值的做法。但是不同的声明方法字符串的比较结果也是不同的。例如:Stringstr1=newString("a");Stringstr2=newString("a");str1==str2输出falsestr1equals(str2)输出true而如果这样声明Stringstr1="a";Stringstr2="a";str1==str2输出truestr1equals(str2)输出true这是因为equals方法本来也是比较引用的字符串类在实现的时候重写了该方法。第一种声明方法等于是声明了两个对象,用’==‘比较是时候比较的是引用输出的是false由于他们的值相同用equals的时候就比较的是值了,输出true。第二种情况不是因为比较有与第一种有差异,而是因为声明有差异,第二种声明方法在声明的时候有堆或堆栈共用的现象,也就是说在声明的时候如果如果声明为类属性他会检查在堆栈中有没有与现在声明的是相同结构的字符串。如果有就直接将地址指向已有内存地址。声明在方法内部的局部变量原理一样只不过他是堆栈共享。qt判断字符串全部都是空格:ok=1;//先设置全是空格为真
i=0;//字符串开始
while(s[i])//循环每一个字符
if (s[i]!=32){
ok=0;//非空格
break;
}
if (ok) puts("全是空格");
else puts("有空格之外的字符");
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)