N个字符串插入分隔符

来源:互联网 发布:httppost发送json 编辑:程序博客网 时间:2024/05/16 15:37

写程序时,经常遇到n个字符串插入n-1个分隔符格式化的问题:
比如有一个list:

list=["1111","2222","3333"]

想要达到输出效果:

\"1111\",\"2222\",\"3333\"

使用代码:

string resultText;foreach(string text,list){    resultText+="\"";    resultText+=text;    resultText+="\"";    resultText+=",";}

使用上边的代码就会格式化出这样的结果:

\"1111\",\"2222\",\"3333\"

结尾多了一个”,”,虽然也有办法解决:
1.格式化之后删除末尾的 “,”

2.改变循环条件为count-1,然后最后一个单独写代码。
3.判断是否是末尾一个,然后break

string resultText;i=0;foreach(string text,list){    resultText+="\"";    resultText+=text;    resultText+="\"";    i++;    if(i==count)    {    break;    }    resultText+=",";}

以上方法虽然也能解决,但是一直决得不够优雅,直到今天看了QStringList 的join的源码,才豁然开朗:

/*!    \fn QString QStringList::join(QChar separator) const    \since 5.0    \overload join()*/QString QtPrivate::QStringList_join(const QStringList *that, const QChar *sep, int seplen){    int totalLength = 0;    const int size = that->size();    for (int i = 0; i < size; ++i)        totalLength += that->at(i).size();    if(size > 0)        totalLength += seplen * (size - 1);    QString res;    if (totalLength == 0)        return res;    res.reserve(totalLength);    for (int i = 0; i < size; ++i) {        if (i)            res.append(sep, seplen);        res += that->at(i);    }    return res;}

n个字符串插入n-1个分隔符:

string resultText;count=list.size();for(int i=0;i< count;i++){  //i==0 不触发,正好添加count-1个分隔符  // 比上边break的方案,应该会少一条 sub 汇编指令吧   if(i)   {       resultText+=",";   }    resultText+="\"";    resultText+=list[i];    resultText+="\"";}

完美!