文字列の逆シーケンスの実装


実は、私は前に本を読んで良い方法があるのを見たことがありますが、時間が長くなって覚えていません.の以下は自分で作成したコードです...比較low
#include<iostream>
using namespace std;
char *reverse(char *str);
void main()
{
	char *a="yang hai lin";
	cout<<reverse(a)<<endl;

}

char *reverse(char *str)
{
	int i=0;
	char *save,*p0;
	save=(char *)malloc(sizeof(char)*strlen(str));
	p0=str;
	while(*str++)
		continue;
	str-=2;  //       '\0'        
	
	for(;p0!=str;str--)
		save[i++]=*str;
	  save[i++]=*str;
	  save[i]='\0';
	  return save;
}
各種計算ポインタはどこを指しているのか、
void reverse(char s[])
{
 char c;
 int i,j;
 j = strlen(s) - 1;
 for(i = 0;i < j;i ++)
 {
  c = s[i];
  s[i] = s[j];
  s[j] = c;
  j --;
 }
}
これは比較的に良くて、直接2人は位置を交換しました
あとは直接関数呼び出しがあります!!!strrev(a)
#include<iostream>
using namespace std;
char *reverse(char *str);
void main()
{

char a[]="yang hai lin";//	char *a="yang hai lin";

	cout<<reverse(a)<<endl;
	cout<<"~~~~~~~~~~~~~~~
"; cout<<strrev(a)<<endl; }
最初はメモリエラーを直接実行しました!!!考えてみれば、私はまた間違いを犯しました.文字列のポインタは「yang」を指しています.これは文字定数で、修正は許されません.
まとめて、以前見たことがあるのにどうして今見たのか、それとも最適なコードを書くことができなかったのか??積み重ねてゆくんだね