连接字符串1中的一个字符和字符串2中的第二个字符

时间:2016-07-06 13:54:18

标签: c++

我想连接两个字符串,但它喜欢strin1中的奇数位置字符,甚至来自stri2的位置字符。 这就是我所做的:

string mainvalue(string og2,string eg2)
{
    string odd=og2;
    string even=eg2;
    string s3;
    reverse(odd.begin(),odd.end());
    cout<<"Main ordered text is :"<<odd<<endl;

    int length1=odd.length();
    int length2=even.length();

    for(int i=0;i<length1;i++)
    {
        for(int j=0;j<length2;j++)
        {
            s3 += odd[j]+even[j];
        }
    }

    cout<<"Complete text is :"<<s3<<endl;
    //return s3;
}

输出看起来像:▌π═▌π═▌π═

1 个答案:

答案 0 :(得分:0)

您输出奇怪的原因是您要添加两个字符,添加两个字母字符很少会产生可打印的结果。

但即使您可以添加字符来制作字符串,您的代码也会不正确,因为您的结果基本上是所需结果的length1个副本。

假设输入字符串长度相等,一个简单的解决方案是交替从每个字符串中取一个字符。

这假设第一个元素是&#34;奇数&#34; - 如果它&#34;偶数&#34;,只需在循环中交换两行:

string mainvalue(string odds, string evens)
{
    string merged;
    for (string::size_type i = 0; i < odds.size(); ++i)
    {
        merged += odds[i];
        merged += evens[i];
    }
    return merged;
}

您也可以这样做:

string mainvalue(string odds, string evens)
{
    auto merged = string {odds.size() + evens.size(), ' '};
    auto odd = odds.begin();
    auto even = evens.begin();
    auto out = merged.begin();
    while (odd != odds.end())
    {
        *out++ = *odd++;
        *out++ = *even++;
    }
    return merged;
}