- ベストアンサー
プログラミング C++
プログラミングのC言語で入力文字を関数を使ってポインタを使わずに逆順にするプログラムを作りたいのですが、ポインタを使ってならできるのですが、ポインタを使わずにはどのように考えればいいでしょうか?。 #include <string.h> void reverse (char *ss); int main(void) { char ss[14]; gets(ss); reverse(ss); printf("逆順=%s\n",ss); return 0; } void reverse(char *ss) { int a,b,c; b=0; c=strlen(ss)-1; while(b<c){ a=*(ss+b); *(ss+b)=*(ss+c); *(ss+c)=a; b++; c--; } }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ポインタを使わずにすませるのは無理ではないかと思います。 下記のコードは一見ポインタを使っていないように見えるかもしれませんが、実際は使っています。 #include <stdio.h> #include <string.h> void reverse (char ss[]); int main(void) { char ss[14]; gets(ss); reverse(ss); printf("逆順=%s\n", ss); return 0; } void reverse(char ss[]) { int b, c; char a; for (b = 0, c = strlen(ss) - 1; b < c; b++, c--) { a = ss[b]; ss[b] = ss[c]; ss[c] = a; } }
その他の回答 (2)
- jacta
- ベストアンサー率26% (845/3158)
C言語なのかC++なのかよく分かりませんが、両方書いてみます。 まずはCから、 #include <stdio.h> int main() { int c = getchar(); if (c != EOF && c != '\n') { main(); putchar(c); } return 0; } C++は素直に、 #include <iostream> #include <string> #include <algorithm> int main() { std::string s; std::getline(std::cin, s); std::reverse(s.begin(), s.end()); std::cout << s << std::endl; return 0; } とでもしておきましょう。 関数の呼び出しやstd::endlも関数へのポインタを使っていることになるのかもしれませんが、少なくともポインタを意識する必要はないはずです。
- Tasuke22
- ベストアンサー率33% (1799/5383)
ポインタを使わない、という条件設定は厳密な 表現が要求されるところです。なにしろ、プロ グラムというものはポインタの塊ですからね。 まあ、ここではreverse関数の引数のポインタ 表現に限定するのでしょうね。 void reverse(char ss[]) として配列処理するということでしょう。 頑張って考えてください。
お礼
ありがとうございます。わかりました。