• ベストアンサー

困っています

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

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

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

#2補> #include <stdio.h> unsigned str_length(const char str[]){ unsigned len=0; while (str[len]) len++; return (len); } void put_rstring(const char str[]){ unsigned i; i = str_length(str); while (i-- >0) putchar(str[i]); } int main(void){ char str[30]; int ch,i=0; printf("文字列を入力\n"); while (1) { if (EOF==(ch=getchar())) break; else str[i++]=ch; } str[i]='\0'; printf("逆から表示"); put_rstring(str); puts("です。"); return(0); }

gsosba
質問者

お礼

ありがとうございます。おかげさまで分かりました。

その他の回答 (4)

回答No.4

> どこが駄目か教えてください。宜しくお願いします。 > (コンパイルエラーです。) どの行でどんなエラーが出たかくらいは明記すべし。 ところで、↓に従うつもりはないのですね。 1. 文字列格納領域: char str[30]; を用意し、 2. 入力された文字列を"そのまま"strに格納し、 2.5 strの内容を逆順にし、 3. strを出力する

gsosba
質問者

補足

コンパイルはできました。しかし、実行してもできません。 何か文字列を入力して、 そして、Ctr1+Zを押す。ここで、本当なら、逆順のプログラムが、表示されるのですが、ZZZとなってしまってプログラムが表示されません。そこで、Enterを押すと、逆順から表示とでるのですが、文字列が文字化けみたいになってしまいます。どうすればいいですか教えてください。宜しくお願いします。別に従うつもりがないわけではないんですが ...

  • lawson
  • ベストアンサー率44% (29/65)
回答No.3

要素数がNだとして。 str[0]と、str[N-1]を入れ替えます。 str[1]と、str[N-2]を入れ替えます。 str[2]と、str[N-3]を入れ替えます。 ・ ・ ・ そうすると、期待通りの結果になりませんか? indexを0から(N/2)-1まで str[index]と、str[N-1-index]を入れ替えます。 をすれば期待通りの結果になりませんか? これについては、 ↓にソースを示します。 あと、別解としては、http://www.interq.or.jp/jazz/iijima/stl/contents/reverse_etc.html std::reverse( を使う。以上。 #include <stdio.h> #define MAX 512 void reverse(char* argData); int main(int argc, char** argv) { char str[MAX]; int count = 0; printf("文字列を入力"); while (1) { char ch=getchar(); if (ch == EOF) { str[count] = '\0'; break; } str[count] = ch; count++; } reverse(str); printf("\n"); printf("[%s]\n", str); return 0; } void reverse(char* argData) { int size = strlen(argData); int half = size / 2; int index = 0; for( ; index < half ; index++) { char temp = argData[index]; argData[index] = argData[size-1-index]; argData[size-1-index] = temp; } }

gsosba
質問者

お礼

ありがとうございます。おかげさまで分かりました

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

参考URLが参考になるかも

参考URL:
http://okwave.jp/kotaeru.php3?qid=1438944
gsosba
質問者

補足

考えて見たのですが、どうしても分かりません。どこが駄目か教えてください。宜しくお願いします。 (コンパイルエラーです。) #include <stdio.h> unsigned str_length(const char str[]) { unsigned len=0; while (str[len]) len++; return (len); } void put_rstring(const char str[]) { unsigned i = str_length(str): while (i-- >0) putchar(str[i]); } int main(void) { char str[30]; int ch; printf("文字列を入力\n"); /* ----この文字列を入力したあとに、Ctrl+Zを押すと、逆から表示               で反対から、文字列が表示----*/ while (1) { ch=getchar(); if (ch==EOF) break; } printf("逆から表示"); put_rstring(str); puts("です。"); return(0); }

回答No.1

# 注意:タイトルは質問内容を端的に表したものを。 1. 文字列格納領域: char str[30]; を用意し、 2. 入力された文字列を"そのまま"strに格納し、 3. strを出力する プログラムなら書けますか? それができたら、上記(2)と(3)の間に 2.5 strの内容を逆順にし、 を追加すればいい。まずは(1)~(3)を。

gsosba
質問者

補足

考えて見たのですが、どうしても分かりません。どこが駄目か教えてください。宜しくお願いします。 (コンパイルエラーです。) #include <stdio.h> unsigned str_length(const char str[]) { unsigned len=0; while (str[len]) len++; return (len); } void put_rstring(const char str[]) { unsigned i = str_length(str): while (i-- >0) putchar(str[i]); } int main(void) { char str[30]; int ch; printf("文字列を入力\n"); /* ----この文字列を入力したあとに、Ctrl+Zを押すと、逆から表示               で反対から、文字列が表示----*/ while (1) { ch=getchar(); if (ch==EOF) break; } printf("逆から表示"); put_rstring(str); puts("です。"); return(0); }

関連するQ&A