合并内容流 快手机试题

链接:https://www.nowcoder.com/questionTerminal/0f3bdc60198244d9a8893b843afd2310
来源:牛客网

合并两个内容流,实现隔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 }

 

posted @ 2020-03-20 13:34  hemeiwolong  阅读(405)  评论(0编辑  收藏  举报