递归。我查看了其他在线解决方案,它们似乎与我的完全相同。代码应该反转字符串(在它的位置),但它没有。例如,当输入为st2 = "abcdefg“时,输出为空字符串。我原以为st2 = "gfedcba“。我遗漏了什么?
#include <stdio.h>
#include <string.h>
void recurse_reverse(char s[], int sz)
{
int i=0,j = sz -1;
if(i<j)
{
swap(&s[i],&s[j]);
recurse_reverse(s+1, sz-2);
}
}
void swap( char* s1, char *s2)
{
char tmp;
tmp = *s1;
*s1 = *s2;
*s2 = tmp;
}
int main(void)
{
char st1[9] = "abcdefg", st2[9];
strcpy(st2,st1);
recurse_reverse(st2,9);
printf("s1 = %s\ns2 = %s",st1,st2);
printf("\n" );
return 0;
}发布于 2016-11-16 10:31:58
您正在交换st1末尾的2个零字节。因此,st2以空字节开始,因此printf()没有打印任何内容。你只需要修正你的论点传递。而不是
recurse_reverse(st2,9);做
recurse_reverse(st2,strlen(st1));您可能希望添加逻辑以确保目标数组st2有足够的空间。
发布于 2016-11-16 10:45:33
我添加了一个printf语句来调试这个问题,并得到了下面的输出。您正在尝试访问第9个变量,它是一个终止的空字符\0,因此您只能获得\0作为输出,而不是实际的反向字符串。
您可以使用strlen来获取字符串长度,而不是硬编码字符串的大小。
1st char = a and 9th char is ▒
1st char = b and 9th char is
1st char = c and 9th char is g
1st char = d and 9th char is f
s1 = abcdefg
s2 = ▒溶液
预期代码更改
recurse_reverse(st2,strlen(st1));输出
1st char = a and 9th char 9th char is g
1st char = b and 9th char 9th char is f
1st char = c and 9th char 9th char is e
s1 = abcdefg
s2 = gfedcba发布于 2016-11-16 10:36:55
#include <stdio.h>
#include <string.h>
void swap( char* s1, char *s2);
void recurse_reverse(char s[], int sz)
{
int i=0,j = sz-1;
if(i<j)
{
swap(&s[i],&s[j]);
recurse_reverse(s+1, sz-2);
}
}
void swap( char* s1, char *s2)
{
char tmp;
tmp = *s1;
*s1 = *s2;
*s2 = tmp;
}
int main(void)
{
char st1[9] = "abcdefg", st2[9];
int len=0;
strcpy(st2,st1);
len =strlen(st2);
recurse_reverse(st2,len);
printf("s1 = %s\ns2 = %s",st1,st2);
printf("\n" );
return 0;
}https://stackoverflow.com/questions/40629678
复制相似问题