N个字符串插入分隔符

写程序时,经常遇到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+="\"";
}

完美!

你可能感兴趣的:(QT,例子)