合并内容流 快手机试题
链接:https://www.nowcoder.com/questionTerminal/0f3bdc60198244d9a8893b843afd2310
来源:牛客网
- 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
- 算法知识视频讲解
合并两个内容流,实现隔4个插入1个,如果合并完还有剩下,则加内容流尾部
输入描述:
第行表示第一种类型的内容,字符数量<=100,空格分隔。比如说
1 2 3 4 5 6 7 8 9
a b c
输出描述:
合并两种内容流,输出
1 2 3 4 a 5 6 7 8 b 9 c
示例1
输入
1 2 3 4 5 6 7 8 9 a b c
输出
1 2 3 4 a 5 6 7 8 b 9 c
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 vector<string> split(string in, string patten) //字符串分割函数 5 { 6 in += patten; 7 vector<string> ve; 8 9 int pos = in.find(patten); 10 while (pos != string::npos) 11 { 12 string tem = in.substr(0, pos); 13 ve.push_back(tem); 14 in = in.substr(pos+1); 15 pos = in.find(patten); 16 } 17 18 return ve; 19 } 20 21 int main() 22 { 23 string stra, strb; 24 vector<string> vea, veb; 25 26 getline(cin, stra); 27 getline(cin, strb); 28 29 vea = split(stra, " "); //分割字符串 30 veb = split(strb, " "); 31 32 int flag = 0; 33 34 for (int i=0, j=0; i<vea.size(); ) 35 { 36 for (int k=0; k<4; k++) //输出4个a序列字符 37 { 38 cout<<vea[i++]<<" "; 39 40 if (i >= vea.size()) //a序列先输出完,flag置1,输出剩下的b序列即可 41 { 42 flag = 1; 43 break; 44 } 45 } 46 47 if (j >= veb.size()) //注意不要漏了b序列先输出完的情况,否则会发生段错误! 48 { 49 for ( ; i<vea.size(); ) 50 { 51 cout<<vea[i++]<<" "; 52 } 53 break; 54 } 55 56 if (flag) //如果a序列输出完,输出剩下的b序列 57 { 58 for ( ; j<veb.size(); ) 59 { 60 cout<<veb[j++]<<" "; 61 } 62 } 63 64 else //注意这里要用else,否则会发生端错误! 65 cout<<veb[j++]<<" "; 66 } 67 68 return 0; 69 }