函数reverseAr()接受两个参数,一个char(ar [])数组和数组(n)的大小,然后反转数组的内容(不使用另一个数组)。然后,该函数将通过参数ar。
将结果返回给调用函数我的代码似乎无法运行,我认为我错误地在函数之间传递了值,但我无法弄清楚在哪里。
以下是代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <math.h>
void reverseAr(char ar[], int n);
int main()
{
char str[128];
int len;
printf("\nEnter an array of characters: ");
gets(str);
len = strlen(str);
printf("The reversed array of characters is = %s\n", reverseAr(str, len));
return 0;
}
void reverseAr(char ar[], int n)
{
char temp = ar[0];
ar[0] = ar[n - 1];
ar[n - 1] = temp;
if (n > 1)
{
reverseAr(++ar, n - 2);
}
}
预期产出:
Enter an array of characters: abcde
The reversed array of characters is = edcba
答案 0 :(得分:5)
此:
char str;
gets(str);
是未定义的行为,应该给出您忽略的编译器警告(甚至错误)。
gets()
要求指针指向一个字符数组,你要给它单个字符的值,这是不一样的什么都没有。它会将该字符的未定义值解释为地址,并将输入文本存储在那里。
应该是:
int main()
{
char line[128];
printf("\nEnter an array of characters: ");
if(fgets(line, sizeof line, stdin) != NULL)
{
const size_t len = strlen(line);
printf("The reversed array of characters is = %s\n", reverseAr(line, len));
}
return 0;
}
strlen()
的返回类型不是int
,它是size_t
所以您应该使用它,并相应地更改reverseAr()
。
答案 1 :(得分:3)
这是用于反转字符串
的工作代码#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <math.h>
int reverseAr(char ar[], int , int);
int main()
{
char str[128];
int len;
printf("\nEnter an array of characters: ");
if(fgets(str, sizeof(str), stdin) != NULL)
{
len = strlen(str);
reverseAr(str, 0, len-1);
}
printf("The reversed array of characters is = %s\n", str );
system("pause");
return 0;
}
int reverseAr(char ar[], int first, int last)
{
char temp = ar[first];
ar[first] = ar[last];
ar[last] = temp;
if (first < last)
{
reverseAr(ar, ++first, --last);
}
else
{
return 0;
}
}
答案 2 :(得分:2)
我认为问题在于如何打印结果:
void reverseAr(char ar[], int n);
printf("The reversed array of characters is = %s\n", reverseAr(str, len));
printf需要一个字符串,你传递的是无效的......
您应该将其替换为:
reverseAr(str, len-1);
printf("The reversed array of characters is = %s\n", str);
您会注意到我正在将len
的len-1传递给reverseAr
,这是因为您希望单独留下字符串中的最后一个字符('\ 0'),并且只切换其余的人物。最终你想要修复reverseAr
函数:
void reverseAr(char ar[], int i, int n)
{
char temp = ar[i];
ar[i] = ar[n];
ar[n] = t;
if (i < n)
{
reverseAr(ar, i++, n - 1);
}
}
并以不同的方式称呼它:reverseAr(str,0,len-1);
答案 3 :(得分:0)
你可以在reverseAr函数中使用指针而不是使用数组名(因为++ ar不是有效的),下面的一些东西应该可以工作 -
/ *在Main * /
int main() {
char str[128];
int len;
printf("\nEnter an array of characters: ");
gets(str); /* use fgets instead */
len = strlen(str) - 1; /* length is one less than the strlen */
printf("The reversed array of characters is = %s\n", reverseAr(str, len));
return 0;
}
void reverseAr(char * ar,int n) {
/* Base case */
if (ar > (ar + n))
{
return;
}
char temp = *ar;
*ar = *(ar + n);
*(ar + n) = temp;
reverseAr(ar + 1, n - 1);
}