C++用一个函数反序字符串,我这个函数哪里有问题吗?

求高人赐教
char* Reverse(char* str) {
int len = strlen(str);
char temp;
for (int i = 0; i < len / 2; i++) {
temp = str[i];
str[i] = str[--len];
str[--len] = temp;
}
return str;
}

分析

在中间的交换过程中存在问题。使用--x的形式会先进行自减再使用变量的值。我们假设len长度为8。那么当i=0时,循环过程就变成了如下的代码:

temp=str[0];

str[0]=str[7];

str[6]=temp;

并且,len的值也产生了变化,会影响到for循环的运行。

可以列举观察下,

当i=0时,交换的位置是len-1,

当i=1时,交换的位置是len-2,

当i=3时,交换的位置是len-3,以此类推,发现规律,是i与len-1-i进行交换。

代码截图

代码截图

完整测试代码

#include <iostream>

#include <cstring>

#include <cstdio>

using namespace std;


char* Reverse(char *str)

{

    char temp;

    int len=strlen(str);

    for(int i=0;i<len/2;i++)

    {

        temp=str[i];

        str[i]=str[len-1-i];

        str[len-1-i]=temp;

    }

    return str;

}


int main()

{

    char mystr[100]={0};

    cin>>mystr;

    Reverse(mystr);

    cout<<mystr;

    return 0;

}

文件链接

直接复制粘贴会有格式上的问题,我上传了一份到网盘,有需要自行获取。

网页链接

手打不易,望采纳~

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-03-06
你这个程序运行的时候表示字符串长度的量len一直在减少,所以i<len/2其实没有运算到字符串一半已经停止了,换成以下语句试试:
for (int i = 0; i < len / 2; i++) {
temp = str[i];
str[i] = str[len-i-1];
str[len-i-1] = temp;
}本回答被提问者采纳