• ベストアンサー

このプログラムどうやったら??

引数として受け取った文字列を逆順にした文字列に変換する関数なんですけども、全くわかりません。教えていただけませんか?? つまりは、キーボードから入力した文字列を逆順に表示させるってことなので、 void str_reverse(char src[]) を使えばいいのかと思うのですが、、、 Osaka Dome→emoD akasO みたいな感じなんですけれども。。。 お願いします!

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

  • ベストアンサー
回答No.1

void str_reverse(char src*) { int strLen; /*入力文字列の長さ*/ char wkStr[100]; /*入力文字列の退避*/ int srcCnt; /*入力文字列のカウンタ*/ int desCnt; /*出力文字列のカウンタ*/ int cnt; strLen = strlen(src); /* 入力文字列の長さ*/ strcpy(wkStr ,src); /* 入力文字列の退避*/ desCnt = strLen-1; for(srcCnt=0;srcCnt<strLen ;srcCnt++) /*入力文字の最初から最後まで1文字ずつ拾う*/ { src[desCnt] = wkStr[srcCnt]; desCnt--; } } こんなんでどうでしょう?

その他の回答 (3)

  • uu0v0uu
  • ベストアンサー率31% (17/54)
回答No.4

char *str_reverse(char *src){ char tmp[2]; if(strlen(src) == 0) return; tmp[0]=src[0]; tmp[1]='\0'; strcpy(src, str_reverse(&src[1])); strcat(src, tmp); return(src); } forもwhileも使わないで書いてみました。 ってホントこれで動くかしら? strcpyのところが心配。

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.3

日本語処理を考えなくて良いのなら、 void str_reverse(char *src) { char *forward, *rev; forward = src; rev = src + strlen(src) - 1; while(forward < rev) { *forward ^= *rev; *rev ^= *forward; *forward++ ^= *rev--; } } こんなのでどうだろうか。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

char *str_reverse(char *str){ char c,*front,*back; for(front=str,back=str+strlen(str)-1;front < back;front++,back--){ c=*front;*front=*back;*back=c; } return(str); }