• ベストアンサー

C言語の式を教えて頂きたいのですが

「Yahoo」と入力すると、 1.「oohaY」と、逆から表示 2.文字数=5と表示 3.「YAHOO」と大文字で表示 というプログラムは、それぞれどのように書いたらいいでしょう? char moji[9]; は使うそうですが、int、for、if、putchar、getchar、printf、scanfなど、まだ基礎の基礎を習っている段階の初心者なので、できるだけ簡単にお願いします。

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

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

#include <stdio.h> int main(void){ char moji[9]; int mojisu; int i; printf("8文字以内で入力>"); scanf("%s", moji); for(i=0;moji[i]!='\0';i++) ; mojisu=i; for(i=mojisu;i>0;i--) putchar(moji[i-1]); putchar('\n'); printf("文字数=%d\n",mojisu); for(i=0;i<mojisu;i++) if('a' <= moji[i] && moji[i] <= 'z') putchar(moji[i]-('a'-'A')); else putchar(moji[i]); putchar('\n'); return 0; }

DT50
質問者

お礼

ご回答ありがとうございます。 これです!自分がわかる関数のみで書かれたものは!早速試してみますね。結果は夜にご報告いたします。

DT50
質問者

補足

動きました!感激!ありがとうございます。

その他の回答 (5)

  • FAY
  • ベストアンサー率49% (95/193)
回答No.6

#include <string.h> #include <stdio.h> void main( void ) {   char string[9];   printf("8文字以下の文字列を入力して下さい。\n>");   scanf("%s", string);   char * copy = _strupr( _strdup( string ) );   char * pRev = _strrev( _strdup( string ) );   size_t nCount = strlen( _strdup( string ) );   printf( "入力文字列: %s\n", string );   printf( "逆順   : %s\n", pRev );   printf( "文字数  : %d\n", nCount );   printf( "大文字変換: %s\n", copy ); } #台無しかも・・・ #参考までにということで

DT50
質問者

お礼

わざわざありがとうございます。 もう少し勉強してからやってみようかと思います。

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.5

対話入力にscanf(3)を使うのは、その危険性が分かるまでやめたほうが良いでしょう。 算術演算による小文字大文字変換は、システム依存性があり、移植性を損ないます。 -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- #include <stdio.h> char up(char c) { int i; char *p; static char u[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; static char l[] = "abcdefghijklmnopqrstuvwxyz"; for (i = 0, p = l; i < 26; ++i, ++p) { if (*p == c) break; } if (*p == '\0') return c; return (u[i]); } int main(void) { char moji[9]; char *p; int c, n, i; printf("\n8文字以内で入力>"); for (n = 0, p = moji; n < 8; n++, p++) { if ((c = getchar()) == EOF) { return(0); } else if (c == '\n') { *p = '\0'; break; } else { *p = c; } } for (i = 0; i < n; i++) { putchar(*--p); } printf("\n文字数 = %d\n", n); for (i = 0, p = moji; i < n; i++,p++) { putchar(up(*p)); } putchar('\n'); return (0); }

DT50
質問者

お礼

簡単なプログラムにしていただき、ありがとうございました。

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.3

すみませんバグがありました。 #include <stdio.h> #include <ctype.h> #include <string.h> #include <stdlib.h> int main(void) { char buf[BUFSIZ]; int n,i; while (fgets(buf, BUFSIZ, stdin) != NULL) { n = strlen(buf); buf[--n] = '\0'; for (i = n - 1; i >= 0; --i) { putchar(buf[i]); } printf("\n文字数 = %d\n", n); for (i = 0; i < n; i++) { putchar(toupper(buf[i])); } putchar('\n'); } return (0); }

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.2

#include <stdio.h> #include <ctype.h> #include <string.h> #include <stdlib.h> int main(void) { char buf[BUFSIZ]; int n,i; while (fgets(buf, BUFSIZ, stdin) != NULL) { n = strlen(buf); buf[--n] = '\0'; for (i = n; i >= 0; --i) { putchar(buf[i]); } printf("\nn = %d\n", n); for (i = 0; i < n; i++) { putchar(toupper(buf[i])); } putchar('\n'); } return (0); }

DT50
質問者

お礼

どうもありがとうございます!教えて頂いたものの中では… <ctype.h> <string.h> buf[BUFSIZ]; (fgets(buf, BUFSIZ, stdin) ! strlen(buf); (buf[i]); (toupper(buf[i])); (fgets(buf, BUFSIZ, stdin) strlen(buf); 重複する部分もあるとおもいますが、上記の単語は初めてなので、これらを使わないで実行できるプログラムはないでしょうか?申し訳ありません。

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.1

じゃ、1だけ。strrev関数を使えば一発です。 そういうことじゃない?

DT50
質問者

お礼

どうもありがとうございます!その関数は習ってないですね(汗)。他に方法はないでしょうか?No.2さんへのお礼も参考にして、お願いいたします。