网站源码如何优化,网站建设费 项目经费,宜宾网站建设多少钱,全屋定制十大名牌有哪些品牌题目要求#xff1a;
编写一个C程序#xff0c;实现以下功能#xff1a;编写一个常规的函数和一个递归函数#xff0c;两个函数均能将输入的一个字符串以按反序形式的字符串作为返回值。在main函数中输入一行字符串#xff0c;分别调用两个函数#xff0c;输出反序后的字…题目要求
编写一个C程序实现以下功能编写一个常规的函数和一个递归函数两个函数均能将输入的一个字符串以按反序形式的字符串作为返回值。在main函数中输入一行字符串分别调用两个函数输出反序后的字符串。
思路常规思路怎么反转一个字符串呢对于常规函数和目前已知的思想来说冒泡排序或者是不二之选了所以这里想提一提一种新思路双指针
双指针
通过定义两个指针p,q一个指向数组的头部一个指向数组的尾部在循环之中不断去交换数组头部和尾部的内容进行一次交换之后p指针向后进一q指针向前减一。直到pq指针相同或者pq。 而对于递归来说要怎么处理呢递归的思想一直是个难点但在这题来说算是比较简单。为了得到反转的字符串可以让数组尾部赋给一个新数组的头部然后不断去递归这个操作即可解决。
这里说一下是不可以用strcpy来拷贝自定义数组的因为strcpy的函数原型只能是一个常量而不能是变量。strcpy的函数原型char *strcpy(char *strDest, const char *strSrc);
代码如下
#define _CRT_SECURE_NO_WARNINGS 1
#includestdio.h
#includestring.h
#includestdlib.h
#define MAX 20
/*编写一个C程序实现以下功能
编写一个常规的函数和一个递归函数两个函数均能将输入的一个字符串以按反序形式的字符串作为返回值。
在main函数中输入一行字符串分别调用两个函数输出反序后的字符串。
*/
void funcRecursion(char* str, int n) {int i 0;i;int strTmp[MAX];if (n 1)return printf(%s,str);else {strTmp[i] str[n];return funcRecursion(str, n - 1);}
}
void func(char* str, int n) {int p, q;p 0, q n;while (p q) {char tmp str[p];str[p] str[q];str[q] tmp;p; q--;}printf(%s, str);
}
int main() {char str[MAX];gets(str);strlen(str);func(str, strlen(str) - 1);//减一是为了减去‘\0’printf(\n);funcRecursion(str, strlen(str) - 1);
}