c - 使用递归反转c中的字符串,而不使用任何其他数组或指针

标签 c string pointers recursion

#include<conio.h>
#include<stdio.h>
void main() 
{
    char strr[10]="hello";
    char *st;
    printf("%s",strr);
    st=strv(strr);
    printf("%s",st);
}
char* strv(char *str)
{
   static int i,j;
   char a;
   if(str+1!=NULL) 
   {
      a=*str;
      i++;
      strv(++str);
     *(str-i+j)=a;
     j++;
     return str;
   }
}

代码中存在错误“strv 的类型冲突”,我无法弄清楚原因。请提供通过递归反转数组且不使用任何其他数组或指针的解决方案进行响应

最佳答案

给定约束,至少可以使用 O(n^2) 算法。 该函数定位末尾,记住最后一个字符,在下一级将其替换为零,并在内部调用完成后交换数组开头和原始最后一个字符。

void rev(char *a) {
   int l=strlen(a);
   if (l<2) return;  // nothing to swap if l==0 or l==1
   char b=a[l-1];    // have to remember the ending character
   a[l-1]=0;         // and have to set it to zero for next level
   rev(a+1);
   a[l-1]=a[0];
   a[0]=b;
}

要解决编译错误,最简单的方法是将子程序放在main()之前。

关于c - 使用递归反转c中的字符串,而不使用任何其他数组或指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46324695/

相关文章:

c - 插入二叉树时出现段错误

c - C 编程中指针如何与函数一起使用?

c - 对C中的图像进行框模糊处理(CS50)

c - 在C中访问字符串数组的第一个元素

c - *a=b 和 a=&b 有什么区别?

Javascript 在字符串中查找字母对,为什么我的测试不起作用?

c - 分配/未分配字符串的命名约定

c - 如何使用 gettimeofday() 在 c/unix 中打印时间

c# 两个字符串数组将第一个数组值打印到第二个数组值期望 0

c - 关于输出的解释