Parts of a list -- 7 Kyu

原题

http://www.codewars.com/kata/parts-of-a-list/train/cpp

题目

Write a function Partlist that gives all the ways to divide a list (an array) of at least two elements into two non-empty parts.

编写函数Partlist,把给定的列表(数组)分成两个非空字符串构成的列表(数组)

输入:a = {"az", "toto", "picaro", "zone", "kiwi"}
输出:{{"az", "toto picaro zone kiwi"}, {"az toto", "picaro zone kiwi"}, {"az toto picaro", "zone kiwi"}, {"az toto picaro zone", "kiwi"}}

分析

解决本问题的主要思路是:遍历+字符串连接。

参考答案

#include 
#include 
#include 
#include 

using namespace std;

vector> Partlist(vector const&arr){
    vector> res;
    for(size_t i=0;i(first_oss," "));
        string first = first_oss.str();
        first.pop_back();// 除去字符串最后一个空格

        // 第二个字符串
        ostringstream second_oss;
        copy(begin(arr)+i+1,end(arr),ostream_iterator(second_oss," "));
        string second = second_oss.str();
        second.pop_back();// 除去字符串最后一个空格
        res.push_back(make_pair(first,second));
    }
    return res;
};

说明

  1. 使用copyostream_iterator可以实现字符串数组连接,这是C++的惯用法。
  2. 使用字符串的pop_back(),可以清除字符串连接导致的最后一个多余的空格。(c++11)

其它

你可能感兴趣的:(Parts of a list -- 7 Kyu)