关于字符串倒置的问题,大家看下咋不对

来源:百度知道 编辑:UC知道 时间:2024/06/06 23:30:58
#include<iostream>
#include<stdlib.h>
using namespace std;
void inversion(char string[],int x){
char c,temp;
int m,n;
for(int i=0;i<x;i++)
if((c=string[i])=='\0') n=i;
m=n/2;
for(int i=0;i<=m;i++,n--)
{temp=string[i];string[i]=string[n];string[n]=temp;}
}
int main()
{
char c,str[81];
gets(str);
inversion(str,81);
for(int i=0;(c=str[i])!='\0';i++)
cout<<str[i];
cout<<endl;
system("pause");
}

你的冗余代码,不必要的变量太多了!但只需加一行
for(int i=0;i<=m;i++,n--)
{temp=string[i];string[i]=string[n];string[n]=temp;} 在这里你把'\0'给移动到第一个位置了
n--;//加到循环的前面
for(int i=0;i<=m;i++,n--)
{temp=string[i];string[i]=string[n];string[n]=temp;}

/*
作了下修改.VC编译成功.
程序中有解释.

*/
#include<iostream>
#include<stdlib.h>
using namespace std;
void inversion(char string[],int x){
char c,temp;
int m,n;
for(int i=0;i<x;i++)
if((c=string[i])=='\0') {n=i-1;break; }//为免错误,这里要加上跳出循环的语句,break;n=i-1,不能把'\0'调到字符串前面
m=n/2;
for(i=0;i<=m && i<n;i++,n--) //加多一个条件,去掉int ,重复定义了
{temp=string[i];string[i]=string[n];string[n]=temp;}
}
int main()
{
char c,str[81];
gets(str);
cout<<str<<endl;
inversion(str,81);
for(int i=0;(c=str[i])!='\0';i++)
cout<<c; //cout<<(char)str[i];