连接不同的字符串模式

时间:2010-08-11 00:19:36

标签: c++

我正在编写一个函数,根据字符串的长度连接不同数量的字符串。

以下是我正在做的一些类似c ++的伪代码:

string foo(size_t maxLength)
{
    string a, b, c, d, e, ret;

    //...assign them

    if(a.size() + b.size() + c.size() + d.size() + e.size() <= maxLength)
    {
        ret = a + b + c + d + e;
    }
    else if(a.size() + c.size() + d.size() + e.size() <= maxLength)
    {
        LOG << "B was removed.";
        ret = a + c + d + e;
    }
    else if(a.size() + b.size() + c.size() + d.size() <= maxLength)
    {
        LOG << "E was removed"l
        ret = a + b + c + d;
    }
    //... a large amount of code like the above

    return ret;    
}

有没有一种很好的方法来清理它?

感谢。

3 个答案:

答案 0 :(得分:0)

首先,我将它转换为字符串数组。然后遍历您的选项,看看哪个排列实际上适合您的maxLength。

正如quantumSoup所评论的那样 - 你没有提到你的消除标准,但是一旦你定义了这个标准,就可以根据你的优先级标准通过消除特定的数组索引来迭代选项。

答案 1 :(得分:0)

如果你只是想在视觉上清理它,比如:

    string a, b, c, d, e, ret, temp;

    //...assign them

    temp = a + b + c + d + e;
    if(temp.length <= maxLength) {
        LOG << "none removed";
        ret = temp;
    }

    temp = a + b + c + d;
    if(temp.length <= maxLength) {
        LOG << "e removed";
        ret = temp;
    }    

    temp = a + b + c + e;
    if(temp.length <= maxLength) {
        LOG << "d removed";
        ret = temp;
    }

    //... etc

    return ret;

正如ysap所提到的,如果你有消除标准,你可以用循环优化它。

答案 2 :(得分:0)

如果省略字符串的顺序是任意的,我会尝试构造一个按优先级排序的某种列表。然后我会在列表中工作,直到我填满输出缓冲区。如果你说优先级是外部定义和任意的,你可以用常量表驱动它。