【问题标题】:How to upload different parts of text files to different arrays using c++如何使用 C++ 将文本文件的不同部分上传到不同的数组
【发布时间】:2014-04-11 14:50:17
【问题描述】:

在 c++ 函数中,

readTextFile(ifstream file, char *stateInitials, char *miles, char *shelters);

stateInitials、miles 和 hovers 是我需要将文本文件的单独部分读取到其中的数组。文本文件看起来像

WV 4.5 10
NC 7.2 3
TN 8.2 12

包含阿巴拉契亚小径所在的州、它所包含的英里数以及避难所的数量。

我需要能够将州首字母读入它自己的数组,将它的英里数读入它自己的数组,以及它的避难所数量。我不是在寻找解释的整个程序,但我确实需要关于如何做到这一点的基本概念。

【问题讨论】:

  • 你试过什么?
  • 您的文本文件具有明确的结构化信息,但是您通过将每个信息放入单独的数组中来破坏该结构。使用结构或元组怎么样?此外,更喜欢 std::vector 而不是数组。
  • 第一个参数应该是ifstream& file - 你不想复制ifstream

标签: c++ arrays fstream ifstream


【解决方案1】:

将一行文本分成几部分的任务称为“解析”。规则因情况而异。例如,C++ 编译器会解析 C++ 源代码,但您的示例有不同的规则。

你没有告诉我们规则,所以我们会把细节留给你。谷歌搜索“解析”应该可以帮助您入门。

【讨论】:

  • 这实际上已经带来了几个很好的例子,到目前为止有点超出了我对 c++ 的可读性,但帮助很大。
【解决方案2】:

您可以逐行读取文件并将每一行的内容放入相关向量中:

#include <fstream>
#include <sstream>
#include <string>

std::ifstream textFile("myFile.txt");

std::string line;
while (std::getline(textFile, line))
{
    std::istringstream iss(line);

    std::string str;
    double a, b;
    if (!(iss >> str >> a >> b)) 
    { 
        break;  // error
    }

    stateInitials.push_back(str);
    miles.push_back(a);
    shelters.push_back(b);

}

【讨论】:

  • 这实际上会非常熟练,但是不幸的是我必须使用 c 样式字符串和经典的 fstream 库来上传它。我可以在我的代码中使用 while 语句,这实际上是一个我还没有尝试过的想法。如果您有任何不需要矢量的想法,我将不胜感激。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多