• ベストアンサー

プログラミング 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--; } }

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

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

ポインタを使わずにすませるのは無理ではないかと思います。 下記のコードは一見ポインタを使っていないように見えるかもしれませんが、実際は使っています。 #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; } }

balantyo
質問者

お礼

ありがとうございます。わかりました。

その他の回答 (2)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

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)
回答No.1

ポインタを使わない、という条件設定は厳密な 表現が要求されるところです。なにしろ、プロ グラムというものはポインタの塊ですからね。 まあ、ここではreverse関数の引数のポインタ 表現に限定するのでしょうね。 void reverse(char ss[]) として配列処理するということでしょう。 頑張って考えてください。

関連するQ&A

専門家に質問してみよう