• ベストアンサー

文字を反転させる。

以下の手順に従ってプログラムを作成せよ.適宜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); } これだとただ入力された文字を出力するだけになってしまいますよね・・・・。どうすればいいのでしょうか?

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

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

> ヘッダファイル<stdio.h>だけ strlen()を使ってはいけないという制約がありますので、 s[]のどこまで使っているかを自分で求める必要があります。 例えば、abcdefg <Enter> と入力したならば、終端の'\0'を 除いてs[0]~s[6]の7バイトを使っていることになりますね。 まず、ここまでのコードを考えてみてはいかがでしょうか。 なお、仕様にはs[64], t[64]と書いてありますので、 > char s[256]; > char t[256]; この定義は仕様に反しています。

noname#46595
質問者

補足

#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); } こんな感じでいいのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.3

> こんな感じでいいのでしょうか? と、人に尋ねるよりも前に、ご自分のところで 動作を確認してみる、という発想はないですか?

noname#46595
質問者

補足

自分でちゃんと実行しました。コンパイルもエラーなしでいきした。その上で聞いていますよ。 そりゃそこまで人任せではありませんから。 ただ僕のつくったプログラムだと たとえばyamadaと入力するとadamayと出力できるのですが やまだと日本語入力すると文字化けしちゃうのです・・・・。 これを解決する方法とかありますか?

全文を見る
すると、全ての回答が全文表示されます。
  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.1

反転ってどういう意図で使っているか分かりませんが、 あなたが書いたとおり、 >NULL 文字までの要素を逆順にする これをやればいいのでは? 期待されているのは 以下のような結果だと思いますよ。 文字列を入力: abcdefg 文字列の逆順は gfedcba

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 文字のコピー

    文字配列s[256],t[256]を用意して文字列を入力し、配列sに格納し、その後に配列s の内容を配列t にコピーするプログラムというものなんですが・・・・二つの文字型ポインタp,q で定義し,p = s,q = t として,変数p,q のみを利用してコピーします。 #include <stdio.h> int main ( void ){ char s[256]; char t[256]; char *p; char *q; printf("文字列を入力:"); scanf("%s", s ); p = s; q = t; while(*p != '\0'){ p++; q++; *q = *p; } p = '\0'; printf("文字列は%s",t); getchar(); getchar(); return(0); } ビジュアルスタジオつかってます。 しかしこのように記述するとなぜか最初の文字をよみこんでくれません。 たとえば yasuhiroとすると フasuhiroと出力してしまうのですが なにかいい解決方法はありませんか??

  • 文字列の検索と比較

    文字列の検索と比較 以下の手順に従ってプログラムを作成せよ.適宜printf を利用して,入力支援(「文字列を入 力して下さい」などの画面表示)を行うこと. (1) 文字配列name[5][64] を作成する. (2) キーボードから5 人分の名前を入力し,name 配列に格納する. (3) キーボードから名前を入力し,name 配列の何番目に格納されているかを検索して表示 する.ただし,見つからなかった場合には,「見つかりません」と表示する. (4) 「quit」が入力されるまで(3)の処理を繰り返す. という処理です・・・・・。 #include <stdio.h> int main(void){ char name[5][36]; int i; for(i = 0; i < 5; i++ ){ printf("%d番目の名前を入力:", i + 1); scanf("%s", name[i] ); } printf("五人の名前を入力しました。\n"); printf("どこに格納されているか検索します。名前を入力:"); scanf("%s",name); /* ここに配列の何番目に格納されているかを検索して表示するプログラムを作成する ただし,見つからなかった場合には,「見つかりません」と表示する. 「quit」が入力されるまで処理を繰り返す処理を書く?? */ getchar(); getchar(); return(0); } 検索された文字と入力された文字が同じであることの処理はどうすればいいのでしょうか? 二つの配列を用意してループ文?でしょうか?

  • C言語 ポインタを使用した文字反転処理

    #include <stdio.h> #include <string.h> #define MAX_WARD 256 void main(void) { //===変数宣言=== char aDataIn[MAX_WARD]; //反転前文字列入力先 char aDataOut[MAX_WARD]; //反転後文字列格納先 char *pDataIn, *pDataOut; //反転前・後配列操作用ポインタ int nStrlength; //入力文字数 int nLoopCntWord; //反転処理ループ用 printf("何か文字を入力してください(255文字以内)>"); scanf("%s", &aDataIn); nStrlength = (int)strlen(aDataIn); printf("\マークn文字数は「%d」文字です。\n", nStrlength); //===文字列の反転処理=== pDataIn = ■■■■■■; //aDataIn の最終文字位置 pDataOut = ■■■■■■; //aDataOutの先頭 for( nLoopCntWord = 0; nLoopCntWord < ■■■■; nLoopCntWord ++) { ■■■■■■ = *pDataIn; pDataIn ■■; pDataOut ■■; } ■■■■■■ = ■■; printf("*** 反転処理完了 ***\n"); printf("入力した文字列:%s\n", aDataIn); printf("反転した文字列:%s\n", aDataOut); rewind(stdin); getchar(); } 黒い部分の答えを教えてください

  • C言語 プログラミング 文字列

    C言語のプログラミングについての質問です。 文字列を入力して、それを逆順に表示するというプログラムを作っているのですが、 どうしても上手くいきません。 どこか間違えているのかわかりません。 わかる方いらっしゃいましたらご回答お願いします。 #include <stdio.h> int main(void) { char data[100]; int i, leng; char c; leng = 0; c =getchar(); while((c != '\n') && (c != EOF)) { data[leng] = c; leng = leng + 1; c = getchar(); } printf("%c", data[c]); return 0; }

  • かぶった文字を消すプログラム

    文字列s2中の任意の文字に等しい文字をs1から除外するプログラムを以下の様に作りましたが、ビルトと入力は出来るものの、出力が出ません。何が間違っているのでしょう? #include <stdio.h> main() { int i,j,c; char s[100],t[100]; for( i = 0; (c = getchar()) != '\n'; i++){ s[i] = c; } for( i = 0; ((c = getchar()) != '\n') && (c != EOF); i++){ t[i] = c; } for( i = 0; s[i] != '\0'; i++){ for( j=0; t[j] != '\0'; j++){ if( s[i] == t[j] ){ s[i] = ' '; } } } for( i = 0; s[i] != '\0'; ++i ){ printf("%s", s[i]); } }

  • c言語の文字列の逆順のプログラムがわかりません

    文字列を逆順して出力するプログラミングがわかりません。 #include <stdio.h> #include <string.h> void reverse(char *moji, char *gyaku); int main(void) { char x[30]; char y[30]; puts("文字を入力してください。\n"); scanf("%s", x); reverse(x, y); printf("逆順すると%sです。\n", y); return (0); } void reverse(char *moji, char *gyaku) { int i, len; len = strlen(moji); gyaku = moji + len - 1; for(i = 0; i < len; i ++){ putchar((int)*gyaku); gyaku--; } } 理想とする実行結果は 文字を入力してください。 abcdefg 逆順するとgfedcbaです。 なんですが、 上記のソースを実行すると 文字を入力してください。 abcdefg gfedcba逆順すると(謎の漢字)です。 となります。 どこがおかしいんでしょうか? よろしくおねがいします。

  • c言語でポインタ変数を用いた配列の反転操作

    c言語でポインタ変数を用いた配列の反転操作を行いたいのですが、文字列の反転の仕方が分かりません。流れとしては、文字列の長さを調べてから文字列を反転して表示するという感じです。どうか教えてください。また、その他問題点があればご指摘よろしくお願いします。 #include <stdio.h> int strlength(char *str) { /* 文字列の長さを調べる /* int length = 0; while (*str++ != '\0'){ length++; } return length; } int main(void) { /*配列strSrc[]の文字列を逆にして配列strDst[]に格納する */ char strSrc[] = "reverse this"; char *pC; char strDst[] = "01234567890123456789"; char *pD; int length; printf( "%s\n", strSrc ); /* この部分が分かりません */ printf("%s\n", strDst ) ; return( 0 ); }

  • 自作関数を用いた文字の反転

    タイトルのまんまですが入力された文字を反転して表示する方法がわかりません。 #include <stdio.h> char reversecopy(char moji[]) { int i; char reversemoji[51]; for(i = 50; i > 0; i--) { reversemoji[i] = moji[i]; } return reversemoji[50]; } void main(void) { char n[51]; printf("何か文字を入力してください: "); scanf("%s" ,n); reversecopy(n); n[50] = '\0'; printf("%s\n" ,n); return; } ここまでは作ったのですが、表示されるのは反転されていない文字です。どこかおかしい点があったら(絶対あるはずですが)ご指摘いただければ助かります。 よろしくお願いしますm(_ _)m

  • 上からよんでも下から読んでも同じか?否か?

    以下のプログラムは入力された文字をポインタを使ってpalindromeにコピーしたやつなんですが #include <stdio.h> int main ( void ){ char origin[256]; char palindrome[256]; char *p; char *q; int length = 0; printf("文字列を入力→"); scanf("%s",origin); p = origin; q = palindrome; while(*p != '\0'){ *q = *p; p++; q++; length++; } *q = '\0'; printf("length = %d\n", length); printf("入力された文字:%s",palindrome); getchar(); getchar(); return(0); } これをポインタを使って上から読んでも下から読んでも同じ(いわゆるかいぶんってやつ?)なら1を、違ったら0を返すというプログラムを組みたい場合に文字配列,及び文字配列長を引数とする関数check_anagram を使用してどのように表せるのでしょうか? とりあえずヘッダは<stdio.h>のみでできるようにしたいのですが・・・・ lengthを関数内で使ってfor文で処理? そこら辺の組み方がわからないです。

  • 困っています

    文字列を逆順にするプログラムを考えているのですが分かりません。(例)qwerならrewqです。入力終了は、EOFです。途中まで考えたのですが、分かりません。教えてください。宜しくお願いします。 #include <stdio.h> char str(30); printf("文字列を入力") while (1) { ch=getchar(); if (ch==EOF) break;