c - 通过递归反转字符串中的单词

标签 c arrays string pointers recursion

我正在尝试编写一个 C 函数,该函数接受一个字符串,并返回一个包含反转单词的新字符串。例如,输入“How are you”应该返回“you are How”。以下是我的试用:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *reverseWords(char *str, char *ac)
{
    if (!ac)
    {
        ac = malloc(strlen(str) + 1);
        ac[0] = '\0';
    }

    char *word = strtok(str, " ");
    if (!word)
    {
        return ac;
    }
    reverseWords(NULL, ac);
    strcat(ac, word);
    //strcat(ac, " ");
}

int main()
{
    char s[] = "How are you";
    char *reversed = reverseWords(s, NULL);
    printf("%s\n", reversed);
}

前面的代码打印:“youareHow”,所以看起来这个想法是正确的,只是缺少空格。如果我试图取消对函数最后一行的注释,我不会得到任何输出。那么发生了什么事?我不明白为什么它不起作用。

最佳答案

您忽略了 reverseWords 的返回值。我认为这没问题,因为您引用了 ac

reverseWords 函数的末尾,您不会返回包含连接字符串的 ac

现在您必须取消注释 strcat(ac, ""); 以便将空格添加到返回值。

现在返回值将是包含空格的反转字符串。

您忘记释放分配的字符串。

关于c - 通过递归反转字符串中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58854584/

相关文章:

c++ - 验证 _snprintf 中的格式说明符 - C++

C - 为什么删除未使用的变量声明时我的代码会中断

c - LLVM 字符串输入/输出

javascript - 将二维数组从 ruby​​ 传递到 javascript

C:所有字符串文字都有静态存储期限吗?

C# - 将一串以 '='分隔的键值对转换为字典

Java String自动赋空值

c - C中不同类型的数学运算

c - 在c中实现共享队列时死锁

mysql - 循环遍历数组类别以获取子类别