- ベストアンサー
文字を反転させる。
以下の手順に従ってプログラムを作成せよ.適宜printf を利用して,入力支援(「文字列を入 力して下さい」などの画面表示)を行うこと. (1) キーボードから文字列を入力し,文字配列s[64] に格納する. (2) 文字配列s[64] に格納されている文字列を逆順にしてt[64] に格納する(配列全部を逆 順にするのではなく,NULL 文字までの要素を逆順にする). (3) t[64] を画面表示する. ポインタ使用不可、ヘッダファイル<stdio.h>だけ 入力された文字を反転させるということでしょうか?? #include <stdio.h> int main(void){ int i; char s[256]; char t[256]; printf("文字列を入力:"); scanf("%s" , s); for ( i = 0; i < '\n'; i++ ){ t[i] = s[i]; } printf("文字列の逆順は%s",t); getchar(); getchar(); return(0); } これだとただ入力された文字を出力するだけになってしまいますよね・・・・。どうすればいいのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> ヘッダファイル<stdio.h>だけ strlen()を使ってはいけないという制約がありますので、 s[]のどこまで使っているかを自分で求める必要があります。 例えば、abcdefg <Enter> と入力したならば、終端の'\0'を 除いてs[0]~s[6]の7バイトを使っていることになりますね。 まず、ここまでのコードを考えてみてはいかがでしょうか。 なお、仕様にはs[64], t[64]と書いてありますので、 > char s[256]; > char t[256]; この定義は仕様に反しています。
その他の回答 (2)
- asuncion
- ベストアンサー率33% (2127/6290)
> こんな感じでいいのでしょうか? と、人に尋ねるよりも前に、ご自分のところで 動作を確認してみる、という発想はないですか?
補足
自分でちゃんと実行しました。コンパイルもエラーなしでいきした。その上で聞いていますよ。 そりゃそこまで人任せではありませんから。 ただ僕のつくったプログラムだと たとえばyamadaと入力するとadamayと出力できるのですが やまだと日本語入力すると文字化けしちゃうのです・・・・。 これを解決する方法とかありますか?
- aris-wiz
- ベストアンサー率38% (96/252)
反転ってどういう意図で使っているか分かりませんが、 あなたが書いたとおり、 >NULL 文字までの要素を逆順にする これをやればいいのでは? 期待されているのは 以下のような結果だと思いますよ。 文字列を入力: abcdefg 文字列の逆順は gfedcba
補足
#include <stdio.h> int main(void){ int i; char s[64]; char t[64]; int len; printf("文字列を入力:"); scanf("%s" , s); i = 0 ; while(1){ if(s[i] == '\0'){ len = i ; break ; } i++ ; } printf("文字列の逆順は"); for( i = 0; i <= len-1; i++ ){ t[i] = s[len-1-i]; printf("%c",t[i]); } getchar(); getchar(); return (0); } こんな感じでいいのでしょうか?