问题描述:
? ? ? ? 输入两个字符串s1,s2,编写一个函数使两字符交织,多余较长的部分直接接在后面,
如输入s1=abcd,s2=efghijklmn;
交织后输出为:aebfcgdhijklmn;
? ? ? ? 再编写一个函数,交换s1,s2重新测试,此时输出为:eafbgchdijklmn
代码部分:
#include<iostream>
#include<iomanip>
using namespace std;
void stringwave(string s1, string s2,char * buffer)
{
size_t len;
string tem;
//比较字符串的长度,将较长的字符串用临时变量tem存储
if (s1.length() > s2.length())
{
len = s2.length();
tem = s1;
}
else
{
len = s1.length();
tem = s2;
}
//以字符串较短的byte数作为交替时for循环的次数
for (size_t i = 0; i < len; i++)
{
s1.copy(buffer, 1, i);
buffer++;
s2.copy(buffer, 1, i);
buffer++;
//循环要结束时,直接将较长字符没有交替的部分接在buffer数组后
if(i == len - 1)
{
tem.copy(buffer, s2.length(), i + 1);
}
}
}
void exchange(string &s1, string &s2)
{
string tem;
tem = s1;
s1 = s2;
s2 = tem;
}
int main()
{
string s1 ;
string s2 ;
char buffer[20] = {'\0'};
cin >> s1 >> s2;
stringwave(s1,s2,buffer);
cout << buffer<<endl;
//将s1与s2调换,再重新测试
exchange(s1, s2);
buffer[0] = '\0' ;//清空buffer数组
stringwave(s1, s2, buffer);
cout <<"调换s1,s2后:"<<endl<< buffer << endl;
return 0;
}
运行结果:
?
注意:
- ?主函数buffer[20]数组传过去的是数组首元素的地址,所以当赋完值后需要"buffer++"来移动至数组的下一个储存位置,继续下一次赋值;
- copy()函数的详细用法
?(学习记录)
|