【问题标题】:Reading strings from within a file to a array [closed]从文件中读取字符串到数组[关闭]
【发布时间】:2013-02-21 01:40:41
【问题描述】:

我有一个包含多行多列的文本文件,格式如下。

 234 567 890 4523
 12  34  
 78  23  432

我想将它们读入一个数组,例如a[0][0] = 234,而a[1][0] = 12 等等。我可以使用 input >> a[i] 将它们全部放入一维中,但我希望它在二维数组中。我尝试使用getline(),但到目前为止还没有成功。

【问题讨论】:

  • 您可以将>> 用于二维数组和一维数组。就像您可以像驾驶红色汽车一样驾驶绿色汽车。数组维度(汽车颜色)无关紧要。好吧,数据示例发生了变化,所以我写的虽然是真的,但并不适用......问题似乎真的是关于如何从数据中检测数组大小
  • 空格与到达换行符时开始的新行分隔。正确的?这就是你正在尝试的吗?
  • 在真正的 C++ 多维数组中,所有行的列数相同;但在您的示例中,不同的行具有不同数量的字段。也许您想改用锯齿状数组(也称为不规则数组数组数组)?或者可能是std::vector<std::vector<int> >
  • 是的,没错。每行的列数不同。
  • @Syed: 。 . .这意味着您实际上并不想要多维数组。请决定你想要什么。

标签: c++ string multidimensional-array getline


【解决方案1】:

您可以使用std::vectorstd::vector

对于每一行,读入每个数字并使用push_back 将其复制到相关向量(数组)的末尾。

您可以使用std::istringstream 从代表输入行的字符串中读取。

您可以使用std::getline 将一行输入读入std::string


在伪代码中是这样的

void foo()
{
    std::vector< std::vector< int > > numbers;
    std::string line;
    while( getline( cin, line ) )
    {
        std::istringstream stream( line );
        numbers.push_back( std::vector<int>() );
        std::vector<int>& v = numbers.back();
        int number;
        while( stream >> number )
        {
            v.push_back( number );
        }
    }
}

免责声明:编译器未触及代码,省略所有错误检查等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多