【问题标题】:Storing and Reading Strings From Arrays从数组中存储和读取字符串
【发布时间】:2013-02-09 22:16:22
【问题描述】:

我在为作业执行的某些代码方面遇到问题。当我去编译文件时,它有时可以工作,有时不能。该程序的基本思想是从文件中读取每一行文本并将其存储到一个数组中(数组的大小应该是100,应该有100行文本)。每个文本字符串(每一行)都应该存储在它自己的数组地址中。一旦存储了所有行,程序将从数组中提取每一行,并注意它来自哪个行号。当用 Code::Blocks 编译它时,它运行没有问题,但是,当我用 cygwin 编译它时,我去运行它并收到一条错误消息,上面写着 “在抛出 'std::bad_cast' 的实例后调用终止 什么():std::bad_cast 中止(核心转储)”

如果你们能给我任何帮助,我们将不胜感激!

这是我目前得到的代码:

#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

int main()
{
string aFile[100];
ifstream nFile("TMA1Question4 Text.txt");
string nText;

    if (nFile)
    {
        for (int nLineCounter=1; nLineCounter <=100; getline(nFile, nText))
        {
            aFile [nLineCounter] = nText;
            nLineCounter++;
        }
    }

for (int nLineReader=1; nLineReader<=100; nLineReader++)
{
    cout << "Line" << nLineReader << ": " << aFile[nLineReader] << endl;
}

return 0;
}

【问题讨论】:

  • 如果文件无法访问会怎样?
  • 你的 for 循环应该从 0 开始到 &lt; 100
  • 除了答案之外,当您cout 执行nLineReader + 1 时,这将为您提供正确的行号。

标签: c++


【解决方案1】:

首先,数组从 0 开始索引。数组索引的范围是 0 到 99,而不是 1 到 100。for 循环应该看起来更像:

for (int nLineReader=0; nLineReader<100; nLineReader++)

您试图以偷偷摸摸的方式使用for 循环也是一个问题。 getline 只会在每次迭代之后 被调用。在第一次迭代中,您将空字符串 nText 粘贴到您的数组中。将其更改为:

for (int nLineCounter=0; nLineCounter<100; nLineCounter++)
{
    getline(nFile, nText);
    aFile [nLineCounter] = nText;
}

当然,这取决于您确定文件中有 100 行。从文件中读取行的更安全的方法是使用getline 作为循环的条件:

int nLineCounter = 0;
while (getline(nFile, nText))
{
    aFile[nLineCounter] = nText;
    nLineCounter++;
}

但是,如果您要使用标准容器(您应该这样做),您可以read lines from the file with no loops at all

【讨论】:

  • 哇!非常感谢您的快速回复!我确实有另一种方式,使用 While 循环,但是,在使用 For 循环的编码中,您只要求它读取文件中的第 100 行,然后退出 For 循环,所以如果有额外的它只是没有从他们那里读到的行......我在这个假设中是否正确?另外,就像一个注释,我认为将它从 1-100 更改为 0-99 可以修复它。我不敢相信我有那个脑子放屁!非常感谢您的帮助!
【解决方案2】:

C 和 C++ 中的索引从零开始,因此您的计数器从 0 开始,然后转到小于最大值的 1


也就是说,考虑使用std::vector 而不是原始数组。然后可以使用std::vectorpush_back方法。这样您就可以更轻松地存储任意数量的行,而不仅仅是 100 行。


当前代码还存在一些其他问题,但是当您修复了技术问题后,您大概会发现并修复所有这些问题……;-)

【讨论】:

  • 可能有更有效的方法来做我在这里所做的事情,但是,我正在学习的课程是 C++ 入门,所以我只是使用我学过的东西至今。我知道数组从 0 开始,但是我脑子里放了个屁!哈哈
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 1970-01-01
  • 2014-05-31
  • 1970-01-01
  • 2021-10-25
相关资源
最近更新 更多