我有一个包含行
的文件#include <vector>
#include <initializer_list>
#include <iostream>
#include <iterator> // std::begin, std::end
using namespace std;
struct My_string
{
char const* const ps;
My_string( char const* const s )
: ps( s )
{
cout << " My_string(*) <- '" << s << "'" << endl;
}
My_string( My_string const& other )
: ps( other.ps )
{
cout << " My_string(const&) <- '" << other.ps << "'" << endl;
};
My_string( My_string&& other )
: ps( other.ps )
{
cout << " My_string(&&) <- '" << other.ps << "'" << endl;
};
};
auto main() -> int
{
cout << "Making vector a." << endl;
vector<My_string> const a = {"a1", "a2", "a3"};
cout << "Making data for vector b." << endl;
auto const b_data = { "b1", "b2", "b3" };
cout << "Making vector b." << endl;
vector<My_string> const b( begin( b_data ), end( b_data ) );
}
我按标签拆分行,然后想要将内容分成两部分
将每行输入转换为2个独立元组的方法如下 -
4 3 2
5 6 7
9 8 2
答案 0 :(得分:2)
我假设:
如果我遇到任何这些错误(例如,每行中可能有超过3个元素,或者你需要不同于元组的结构),它可以很容易地进行调整。
val file = "4 3 2\t5 6 7\t9 8 2"
val lines = file.split("\t").map(line => line.split(" ").toList)
val newLines = lines.map({
case a :: b :: c :: Nil => ((a, "1", c), (b, "1", c))
})
newLines.map(println)
// ((4, 1, 2), (3, 1, 2))
// ((5, 1, 7), (6, 1, 7))
// ((9, 1, 2), (8, 1, 2))
编辑:
这个答案基于你最初在你的问题中写的逻辑,并说你想要这种地图:((a b c) => (a 1 c) (b 1 c))
。我现在可以看到你删除了那个部分,所以我不确定我的解决方案中的逻辑是否正确,但是现在您已经拥有了基本的骨架,您可以根据需要进行修改。