首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归:位于其位置的反向字符串

递归:位于其位置的反向字符串
EN

Stack Overflow用户
提问于 2016-11-16 10:25:34
回答 3查看 125关注 0票数 4

递归。我查看了其他在线解决方案,它们似乎与我的完全相同。代码应该反转字符串(在它的位置),但它没有。例如,当输入为st2 = "abcdefg“时,输出为空字符串。我原以为st2 = "gfedcba“。我遗漏了什么?

代码语言:javascript
复制
#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;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-16 10:31:58

您正在交换st1末尾的2个零字节。因此,st2以空字节开始,因此printf()没有打印任何内容。你只需要修正你的论点传递。而不是

代码语言:javascript
复制
recurse_reverse(st2,9);

代码语言:javascript
复制
recurse_reverse(st2,strlen(st1));

您可能希望添加逻辑以确保目标数组st2有足够的空间。

票数 5
EN

Stack Overflow用户

发布于 2016-11-16 10:45:33

我添加了一个printf语句来调试这个问题,并得到了下面的输出。您正在尝试访问第9个变量,它是一个终止的空字符\0,因此您只能获得\0作为输出,而不是实际的反向字符串。

您可以使用strlen来获取字符串长度,而不是硬编码字符串的大小。

代码语言:javascript
复制
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 = ▒

溶液

预期代码更改

代码语言:javascript
复制
recurse_reverse(st2,strlen(st1));

输出

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2016-11-16 10:36:55

代码语言:javascript
复制
#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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40629678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档