• 締切済み

プログラム

文字列str内のすべての英字を大文字に変換する関数および小文字に変換する関数void str_toupper(char *str)    void str_tolower(char *str) を作成したいのですが、検討つかなくて困っています、、 表示例としては、 文字列を入力:asDFgH 大文字:ASDFGH 小文字:asdfgh

みんなの回答

  • isle
  • ベストアンサー率51% (77/150)
回答No.7

C言語の規格では数字の連続性は規定されていますが、アルファベットには規定がありませんから 文字コードを使って計算すると(アスキー)コード体系に依存するプログラムになる気がします。 素直に標準関数(touuper/tolower)を使うのが吉かと。

  • mikaemi
  • ベストアンサー率50% (33/65)
回答No.6

練習として作るのでない限り、if 文や switch 文で比較してやるのではなく、toupper()とtolower()を使うのがいいと思いますよ。あるいは、自分で256個の char の大文字・小文字変換配列を用意してそれを引くようにするとか。。  #include <ctype.h>  char *str_toupper(char *str) {   char *p = str;   while (*p = toupper(*p)) ++p;   return str;  }

  • hilow1
  • ベストアンサー率53% (7/13)
回答No.5

素直にアスキーコード表どおりに変換すれば以下のように実現できます。 全角空白を使用しています。 #include <string.h> void str_toupper(char *str) {   int i;   for (i = 0; i < strlen(str); i++) {     if (*(str+i)>='a' && *(str+i)<='z') {       *(str+i) = *(str+i)-32;     }   } } void str_tolower(char *str) {   int i;   for (i = 0; i < strlen(str); i++) {     if (*(str+i)>='A' && *(str+i)<='Z') {       *(str+i) = *(str+i)+32;     }   } }

参考URL:
http://www.hi-ho.ne.jp/masato_o/refer/ascii.html
  • php504
  • ベストアンサー率42% (926/2160)
回答No.4

文字(ASCIIコード)はコンピュータ内では1バイトの整数として扱われます。 'A'は65、'B'は66・・'Z'は90 小文字も 'a'=97から'z'=122まで決められています。 大文字と小文字の差は32と決まっているので大文字に32を足したら小文字に小文字から32を引いたら大文字に変換できると言うことになります。 if (*str >= 65 && *str <= 90) { *str += 32; } 1バイト文字はシングルクォーテーションでも書けるので上記は if (*str >= 'A' && *str <= 'Z') { *str += 'a' - 'A'; } とも書けます。 これを文字列終端まで繰り返せば良いでしょう。

  • mikaemi
  • ベストアンサー率50% (33/65)
回答No.3

API は、  char *str_toupper(char *str) {   char *p = str;   /* p を使って、大文字にする */;   return str;  } と、引数のポインタをそのまま返すようにするほうが、void より便利かと思います^^

  • tenk90
  • ベストアンサー率28% (6/21)
回答No.2

自分で作るというこだわりが無い限り、 標準関数で良いと思います。 http://www005.upp.so-net.ne.jp/h-masuda/cl/CStrPnt/c1031.html もし、自分で作りたければ以下のサイトの真ん中あたりが 参考になると思います。 http://www1.cts.ne.jp/~clab/hsample/Point/Point09.html

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★アドバイス >void str_toupper(char *str) >void str_tolower(char *str) >を作成したいのですが、検討つかなくて困っています、、  ↑  #include <ctype.h> をインクルードして下さい。  toupper()、tolower() という関数が用意されています。  これは1文字を大文字、小文字に変換する関数です。  これを利用すれば文字列全体を大文字、小文字に変換することが可能です。 ・以上。もう検討が付いたと思いますので頑張って下さい。

関連するQ&A