- ベストアンサー
C言語の式を教えて頂きたいのですが
「Yahoo」と入力すると、 1.「oohaY」と、逆から表示 2.文字数=5と表示 3.「YAHOO」と大文字で表示 というプログラムは、それぞれどのように書いたらいいでしょう? char moji[9]; は使うそうですが、int、for、if、putchar、getchar、printf、scanfなど、まだ基礎の基礎を習っている段階の初心者なので、できるだけ簡単にお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
#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; }
その他の回答 (5)
- FAY
- ベストアンサー率49% (95/193)
#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 ); } #台無しかも・・・ #参考までにということで
お礼
わざわざありがとうございます。 もう少し勉強してからやってみようかと思います。
- mac_res
- ベストアンサー率36% (568/1571)
対話入力に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); }
お礼
簡単なプログラムにしていただき、ありがとうございました。
- mac_res
- ベストアンサー率36% (568/1571)
すみませんバグがありました。 #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)
#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); }
お礼
どうもありがとうございます!教えて頂いたものの中では… <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)
じゃ、1だけ。strrev関数を使えば一発です。 そういうことじゃない?
お礼
どうもありがとうございます!その関数は習ってないですね(汗)。他に方法はないでしょうか?No.2さんへのお礼も参考にして、お願いいたします。
お礼
ご回答ありがとうございます。 これです!自分がわかる関数のみで書かれたものは!早速試してみますね。結果は夜にご報告いたします。
補足
動きました!感激!ありがとうございます。