如何在 n 行中获取整数直到 \n

Posted

技术标签:

【中文标题】如何在 n 行中获取整数直到 \\n【英文标题】:How to get integers until \n for n number of lines如何在 n 行中获取整数直到 \n 【发布时间】:2021-12-11 03:28:58 【问题描述】:

我的意见: 第一个输入是输入将包含的行数

5
7 3 29 0
3 4 3 
2 3 4 55 5
2 3
1 2 33 4 5

我的问题是如何将它们存储在向量的向量中......?

我的概念..

.
.
.
cin>>n;
vector<vector<int>>vec;
while(n--)

    vector<int>vec2;
    for(**Getting input until the line**)
    vec2.emplace_back(input);
    vec.emplace_back(vec2)

我需要实现获取输入直到行。为此,我想将输入作为字符串获取,并在将其转换为 c_string 后使用 strtok 将值存储在向量 vec2 中......但我需要知道是否有任何有效的方法可以克服这个问题..

【问题讨论】:

您的想法实际上非常准确,因为您并不确切知道一行中有多少个数字。对于初学者来说,做你想做的事情并获得整个字符串会容易得多 - 然后对其进行迭代。通过分隔符遍历字符串的一般答案可以在Here 中找到 【参考方案1】:

这是我的建议,YMMV。

    将每一行读入一个字符串。 使用istringstream 将字符串中的整数提取到向量中。 字符串处理后,将push_back向量放入外层向量中。
    unsigned int rows;  
    std::cin >> rows;  
    std::string text_row;  
    for (unsigned int i = 0U; i < rows; ++i)  
      
        std::getline(cin, text_row);  
        std::istringstream numbers_stream(text_row);  
        std::vector<int>  row_data;  
        int number;  
        while (numbers_stream >> number)  
          
            row_data.push_back(number);  
          
        vec.push_back(row_data);  
      

【讨论】:

使用emplace_back() 好习惯! 如果emplace_backpush_back 有优势,那为什么push_back 还在比赛中? push_back 有什么独特的功能吗? Small nitpick - 我会将getline() 移动到for 循环条件中,以防万一它失败:for (unsigned int i = 0U; i &lt; rows &amp;&amp; std::getline(cin, text_row); ++i) 我还将更改外部push_back() 以使用std::move() 以避免不必要的副本:vec.push_back(std::move(row_data)); 或者,就像 Zeros 暗示的那样,使用 emplace_back() 代替:auto &amp;row_data = vec.emplace_back(); while (numbers_stream &gt;&gt; number) row_data.push_back(number);

以上是关于如何在 n 行中获取整数直到 \n的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Hive 中构建正则表达式以获取字符串,直到第 N 次出现分隔符

如何在 N 行中 grep 多个字符串

如何在vim中删除N行中的第一个字符?

如何在条件满足之前用 N 行中的一些对条件行进行子集化,比我的代码更快?

Python|如何求得任意N个整数的最大值与最小值

在 C++ 程序中获取超出输出限制