将列表作为输入,直到按下enter键

Taking lists as input till enter is pressed

本文关键字:enter 列表 输入      更新时间:2023-10-16

我有一个整数N,接下来的N行包含列表,可以有不同的元素从1-100。但我没有提供每个列表的长度。如何处理这种类型的输入

如果我有vector> mylist;

我需要用那些以下一行分隔的列表填充这个列表。

如果N=3

1 2 3
4
5 6

然后mylist [0] = [1, 2, 3], mylist [1] = [4], mylist[2] =[5, 6]。

如何在c++中实现?

Mycode: Not correct but i tried.

int main(){
int t;
cin>>t;
cin.ignore();
while(t--){
    int n;
    cin>>n;
    cin.ignore();
    lists_t lists;
    std::string record;
    while ( std::getline( std::cin, record ) && 
        record.find_first_not_of( ' ' ) != std::string::npos && lists.size()!=n)
    {
        std::istringstream is( record );
        lists.push_back( std::vector<int>( std::istream_iterator<int>( is ), 
                     std::istream_iterator<int>() ) );
    }
    for ( const auto &l : lists )
    {
        for ( int x : l ) std::cout << x << ' ';
        std::cout << std::endl;
    }
   }
 }

问题是,如果我输入t=1和n=3,那么它需要4行,然后显示数据,而不是跟随n行。为什么?

您可以使用标准函数std::getline和字符串流std::stringstream,当然还有容器std::list本身。

下面是一个例子

#include <iostream>
#include <iterator>
#include <list>
#include <sstream>
#include <string>

int main()
{
    std::list<std::list<int>> lst;
    std::string record;
    while ( std::getline( std::cin, record ) && 
            record.find_first_not_of( ' ' ) != std::string::npos )
    {
        std::istringstream is( record );
        lst.push_back( std::list<int>( std::istream_iterator<int>( is ), 
                         std::istream_iterator<int>() ) );
    }
    for ( const auto &l : lst )
    {
        for ( int x : l ) std::cout << x << ' ';
        std::cout << std::endl;
    }
    return 0;
}

输出为

1 2 3 
4 
5 6

如果输入是相同的行。

如果您需要输入给定的行数,那么代码可能如下所示

#include <iostream>
#include <iterator>
#include <list>
#include <sstream>
#include <string>
int main()
{
    std::list<std::list<int>> lst;
    std::string record;
    size_t n;
    std::cin >> n;
    std::cin.ignore();
    while ( n-- && 
            std::getline( std::cin, record ) && 
            record.find_first_not_of( ' ' ) != std::string::npos )
    {
        std::istringstream is( record );
        lst.push_back( std::list<int>( std::istream_iterator<int>( is ), 
                         std::istream_iterator<int>() ) );
    }
    for ( const auto &l : lst )
    {
        for ( int x : l ) std::cout << x << ' ';
        std::cout << std::endl;
    }
    return 0;
}

输入可以是

3
1 2 3
4
5 6