只是一道简单的小题目,却让妹子魂不守舍

用字符指针作函数参数编程实现字符串逆序存放功能。
输入提示信息:"Input a string:"
输入字符串用gets()
输出提示信息:"Inversed results:%s\n"
妹子的程序:
#include
#include
#define N 100
void Inversed(char *s);
int main()
{
char a[N];
printf("Input a string:");
gets(a);
Inversed(a);
printf("Inversed results:%s\n",a);
return 0;
}
void Inversed(char *s)
{
char str[N];
s=&str[0];
int i;
i=strlen(str);
char *t;
t=&str[i-1];
char temp;
for(;*s!='\0';s++,t--)
{
*s=*t;
}
}
为什么输出的结果跟原来一样?究竟该怎么改?求大神 详解。

c

3个回答

其它部分不变,Inversed函数修改如下:

void Inversed(char *str)
{
    if (str == 0) //判断是否为null
    {
        return;
    }

    if (*str == 0) //判断是否为空字符串
    {
        return;
    }

    /* 获取首尾字符地址 */
    char *start = str;
    char *end = start + strlen(str) - 1;
    char temp;

    /* 交换 */
    while (end > start)
    {
        temp = *start;
        *start = *end;
        *end = temp;

        ++start;
        --end;
    }
}

测试通过,思路还是比较清晰的,可以参考注释。

图片说明

 #include <stdio.h>
#include <string>
#define N 100
void Inversed(char *s);
int main()
{
    char a[N];
    printf("Input a string:");
    gets(a);
    Inversed(a);
    printf("Inversed results:%s\n", a);
    return 0;
}
void Inversed(char *s)
{
    char str[N];
    strcpy(str, s);

    int i;
    i = strlen(str);
    char *t;
    t = &str[i - 1];
    for (; *s != '\0'; s++, t--)
    {
        *s = *t;
    }
}

思路应该是:将s先copy到str数组里面,然后再将str里面的字符倒序一个一个放回到s。你对比一下我和你的代码,就知道问题出在什么地方了。

Sunxanxiao
静坐墙角待红杏 *s != '\0'改为i/2>0吧
2 年多之前 回复

Inversed方法的这一句s=&str[0];就被判死刑了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!