使用递归读取一行并返回指向字符串的指针

2023-03-22
前端之家小编收集整理的使用递归读取一行并返回指向字符串的指针内容,希望整理的这个开发编程问题使用递归读取一行并返回指向字符串的指针能够快速解决!

代码问题

我需要创建一个char * read_line(void)函数,该函数以递归方式读取字符,因此在每次递归调用时,它都会创建一个本地char变量,当输入字符已被读入时,它可以确定需要多少内存被分配,以便最终可以返回指向字符串的指针。字符串必须以\ 0终止符结尾。我只能使用一个malloc调用,而不能使用任何全局或静态变量或任何其他容器。我可以使用任何自定义帮助器功能。禁止的单词:realloc; calloc; strcpy; strncpy; 10 我知道这是不切实际的,但这是一项家庭作业。

问题答案

最终通话需要这样做

char *str = malloc(i+1);
str[i] = 0;
return str;

其他电话需要做

char *str = read_line_helper(...);
str[i] = ch;
return str;

这意味着每个呼叫都需要一个i,它比呼叫者多一个。通过将i+1传递给递归函数可以轻松实现这一点。

char *read_line_helper(size_t i) {
   char ch = ...;

   char *str;
   if (...) {
      str = malloc(i+1);
      str[i] = 0;
   } else {
      str = read_line_helper(i+1);
      str[i] = ch;
   }

   return str;
}

第一个电话接听0

char *read_line(void) {
   return read_line_helper(0);
}

如果觉得前端之家所整理的内容很不错的话,欢迎点击下方分享按钮,转发给身边开发程序员好友。

编程问答


是否可以将 Python 程序转换为 C/C++? 我需要实现几个算法,我不确定性能差距是否足以证明我在 C/C++ 中执行它时所经历的所有痛苦(我不擅长)).我想写一个简单的算法,并根……
我想使用 NTT 进行快速平方(请参阅快速 bignum 平方计算),但即使对于非常大的数字……超过 12000 位.
C++ 标准在 3.3.2声明点\"中包含一个半著名的令人惊讶\"名称查找示例: int x = x; 这用自身初始化 x,它(作为原始类型)未初始化,因此具有不确定的值(假设它是一个自动变……
以下代码: myQueue.enqueue(\'a\'); myQueue.enqueue(\'b\'); cout << myQueue.dequeue() << myQueue.dequeue();
据我所知,写时复制不是在 C++11 中实现符合标准的 std::string 的可行方法,但是当它最近在讨论中出现时,我发现我自己无法直接支持这种说法.