【问题标题】:How do i set a function to a constant variable? [closed]如何将函数设置为常量变量? [关闭]
【发布时间】:2016-12-05 12:47:54
【问题描述】:

我已经有一段时间没有从事 C++ 工作了,我正在帮助一个朋友。

有没有没有指针的方法将行数返回给 const int 以在 for 循环中使用?

我知道我可以用指针来做到这一点,但他还没有在课堂上学会它们,而且我在道德上不允许教他教授没有教过的任何东西。

例子:

int numLines = sizeOfFile(inputFile);
for(int i = 0, i < numLines; i++){
  //code here
}

编辑:我的错我正在快速编写这个东西。我今天正在帮助他,我想完成一个项目,这样我就可以在帮助他的同时完成它。我需要一个常量 int 的原因是我可以将数组设置为该大小,而不仅仅是 for 循环。数组就是问题。

【问题讨论】:

  • 打开文件,计算行数,关闭文件,返回计数。
  • 告诉你的朋友计算文件中换行个字符的数量。
  • 墨菲法律老兄。 I am not morally allowed to teach him anything the professor hasn't.
  • 墨菲定律如何适用?他是一年级学生,如果我指点他会感到困惑,教授可能会因为使用它们而标记他

标签: c++


【解决方案1】:

您可以像初始化常规 int 一样初始化 const int。与const int 的区别在于初始化后不能重新赋值。

const int numLines = sizeOfFile(inputFile);
for(int i = 0, i < numLines; i++){
  //code here
}

【讨论】:

  • 那是初始化,不是赋值。您不能分配 const 对象,但您当然会初始化它(一次)。
  • @Quentin - 公平点,我已经更正了答案中的术语。
  • 我需要在一个数组中使用返回值忘记提到了
  • @Trend - 很难弄清楚你想在这里做什么。如果要将文件大小设置为数组中的值,则无法完成。数组值在声明时初始化,因此const int 的数组没有意义。您可能可以使用std::vector&lt;const int&gt; 对象并将您的值写入其中,这本质上是一个包装在 C++ 中的数组。如果要将数组大小设置为numLines,除非使用指针或std::vector(也使用指针),否则无法做到。
  • 是的,我认为数组需要一个常量值。我正在帮助的孩子还没有学会指针。我会得到这部分作业的确切措辞。但我认为灵活的数组大小是书呆子。
【解决方案2】:

在最简单的情况下,您只是在文件中查找'\n' 字符的数量。

假设您已成功将文件打开到:ifstream pFile,那么您可以使用istreambuf_iterator 来计算这些:

const auto numLines = count(istreambuf_iterator<char>(pFile), istreambuf_iterator<char>(), '\n')

这里有几个cmets:

  1. 这个count 操作将消耗pFile 缓冲区中的所有内容,这意味着您需要调用pFile.seekg(0, ios_base::beg)
  2. ifstream 中挑选和选择要读取的值表示代码中有异味。可能是文件格式设计不当,或者程序随后需要重新流式传输剩余的文件内容。 2nd 选项在您的情况下似乎是正确的,因为您试图非法设置具有在运行时找到的值的数组的大小:

我需要一个常量 int 的原因是我可以将数组设置为那个大小

编辑:

当你说你想使用numLines 来“正确的数组”[sic],我的假设是你需要你的数组是那个大小的唯一原因是您要将文件中的每一行流式传输到容器中,也就是说,您将流式传输整个文件一次以计算大小,然后再次流式传输整个文件以填充容器。你应该这样做:

vector<string> lines;

for(string line; getline(pFiles, line);) {
    lines.push_back(line);
}

现在lines 将包含您的整个文件,每个元素都是一行。如果numLines 对您很重要,您可以改用size(lines)

【讨论】:

  • @Quentin 谢谢。显然我还没有在浏览器上点击构建;)
  • 我需要在数组中使用 const int 而不仅仅是我忘记提及的 for 循环。我在下午 3 点到早上 8 点在这里与他会面。想要快速完成
  • @Trend 所以我对您在这里尝试完成的理解是将文件的每一行存储在一个数组中,对吗?
  • 所以我要读取文件并计算行数。这将是记录/等级的数量。我想将从 sizeOfFile() 返回的那个数字设置为一个 const int,这样我就可以使用它来设置一个数组,也可以在一个 for 循环中写入所述数组,然后写一个报告卡并输出到屏幕。
猜你喜欢
  • 2021-11-01
  • 2014-09-26
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多