我正在尝试编写一个 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/