- 締切済み
プログラム
文字列str内のすべての英字を大文字に変換する関数および小文字に変換する関数void str_toupper(char *str) void str_tolower(char *str) を作成したいのですが、検討つかなくて困っています、、 表示例としては、 文字列を入力:asDFgH 大文字:ASDFGH 小文字:asdfgh
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- isle
- ベストアンサー率51% (77/150)
C言語の規格では数字の連続性は規定されていますが、アルファベットには規定がありませんから 文字コードを使って計算すると(アスキー)コード体系に依存するプログラムになる気がします。 素直に標準関数(touuper/tolower)を使うのが吉かと。
- mikaemi
- ベストアンサー率50% (33/65)
練習として作るのでない限り、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)
素直にアスキーコード表どおりに変換すれば以下のように実現できます。 全角空白を使用しています。 #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; } } }
- php504
- ベストアンサー率42% (926/2160)
文字(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)
API は、 char *str_toupper(char *str) { char *p = str; /* p を使って、大文字にする */; return str; } と、引数のポインタをそのまま返すようにするほうが、void より便利かと思います^^
- tenk90
- ベストアンサー率28% (6/21)
自分で作るというこだわりが無い限り、 標準関数で良いと思います。 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)
★アドバイス >void str_toupper(char *str) >void str_tolower(char *str) >を作成したいのですが、検討つかなくて困っています、、 ↑ #include <ctype.h> をインクルードして下さい。 toupper()、tolower() という関数が用意されています。 これは1文字を大文字、小文字に変換する関数です。 これを利用すれば文字列全体を大文字、小文字に変換することが可能です。 ・以上。もう検討が付いたと思いますので頑張って下さい。