みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

文字の並べ替え

C言語で文字の並べ替えをしたいのですが条件があり
ポインタを使って文字を並べ替える別の関数をを渡さなければなりません.(void reverse(char *str)をつくる)

そこで作ったのが
#include <stdio.h>
#include <string.h>

void reverse(char *str);

int main(void){
char s[80];

gets(s);
reverse(s);
printf("%s\n",s);

return 0;

}

void reverse(char *str){
char q[80];
int i,n;

n=strlen(str)-1;
str+=n;
for(i=0;i<=n;i++)q[i]=*str--;
str++;
q[i]='\0';
for(i=0;i<=n;i++)*str++=q[i];
}
なのですが
ポインタを使っている意味が余りないので
ポインタを使うよりよいプログラムを教えてください.
(アドバイスでもかまいません.)

投稿日時 - 2004-01-30 19:42:11

QNo.765528

暇なときに回答ください

質問者が選んだベストアンサー

とりあえず書いてみました。

void reverse(char *s){
char tmp, *s2;
int i,n;
n=strlen(s);
s2=s+n-1;
for(i=0;i<n/2;i++){
tmp=*s;
*s++=*s2;
*s2--=tmp;
}
}

引数の文字数が何文字あっても問題のおきないところと、文字の代入回数が4分の3にですむところが良い点です。アルゴリズムのシンプルさ、という観点では元のルーチンのほうが上な気がします。

投稿日時 - 2004-01-30 20:39:42

お礼

回答有難うございます.

私はこういうプログラムを作りたかったんです.
大変参考になりました.

投稿日時 - 2004-01-30 20:57:52

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)