文字列の逆シーケンスの実装
実は、私は前に本を読んで良い方法があるのを見たことがありますが、時間が長くなって覚えていません.の以下は自分で作成したコードです...比較low
あとは直接関数呼び出しがあります!!!strrev(a)
まとめて、以前見たことがあるのにどうして今見たのか、それとも最適なコードを書くことができなかったのか??積み重ねてゆくんだね
#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」を指しています.これは文字定数で、修正は許されません.まとめて、以前見たことがあるのにどうして今見たのか、それとも最適なコードを書くことができなかったのか??積み重ねてゆくんだね