c++ - 使用递归方法反转ifstream输入

标签 c++ recursion

我有一个函数 int Reverse(ifstream &inFile, int level)。它应该一次读取一个字符,直到达到某个分隔符。然后该函数以相反的顺序显示这些字符。分隔符返回给调用函数。分隔符不会颠倒。

#include <fstream>
#include <cctype>
#include <iostream>

using namespace std;

inline bool checkSeparator(int someValue)
{
   return(isspace(someValue) || someValue == (int)',' || someValue == (int)':' ||     someValue == (int)';' ||
  someValue == (int)'.' || someValue == (int)'?' || someValue == (int)'!' || someValue == EOF);
}

int Reverse(ifstream &inFile, int level)
{
   int input = inFile.get();

   if (!checkSeparator(input))
      Reverse(inFile, ++level);

   --level;

   if (level == 1)
      input = toupper(input);

   if (!checkSeparator(input))
      cout.put(input);

   if (checkSeparator(input))
      return(input);
}

我已经到了无法真正返回分隔符的地步。似乎并非所有控制路径都返回一个值。如何使函数返回正确的值?谢谢。

最佳答案

如果我没猜错,您希望 Reverse 函数在末尾返回分隔符。 问题是 Reverse 函数不一定返回任何内容,因为如果在此递归级别读取的字符不是分隔符,则最后一个 if 语句的计算结果不会为真。 分隔符不会传回。

您可以通过引入另一个变量来解决这个问题。

int Reverse(ifstream &inFile, int level)
{
   int input = inFile.get();
   int separator = 0;
   if (checkSeparator(input))
       return input;
   else
       separator = Reverse(inFile, ++level);
   ...
   // remove the last if
   return separator;
}

关于c++ - 使用递归方法反转ifstream输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17783887/

相关文章:

java - 执行一定数量的步骤后停止递归

c++ - 命名冲突。 C++ 和 OS 库(纯 C)

c++ - C++中通过第一个对象创建第二个对象时,第一个对象到哪里去了?

c++ - 在调用 InternetGetProxyInfo() 之前应该进行哪些初始化?

c++ - sigma.js 兼容的 json 文件是否有特定格式?

linux - 在 Prolog 中测试包冲突

recursion - OCaml:是否可以在单独的文件中定义相互递归的数据结构

c++ - OpenCV 3.4.3 中对 `cv::String::deallocate()' 错误的 undefined reference

java - 包含排除原理中递归函数对其自身求和

git - .gitignore 忽略所有文件,然后递归地允许某种类型的文件