我想连接两个字符串,但它喜欢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;
}
输出看起来像:▌π═▌π═▌π═
答案 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;
}