好きな和訳タイトルを教えてください

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

A 回答 (7件)

C言語の規格では数字の連続性は規定されていますが、アルファベットには規定がありませんから


文字コードを使って計算すると(アスキー)コード体系に依存するプログラムになる気がします。

素直に標準関数(touuper/tolower)を使うのが吉かと。
    • good
    • 1

練習として作るのでない限り、if 文や switch 文で比較してやるのではなく、toupper()とtolower()を使うのがいいと思いますよ。

あるいは、自分で256個の char の大文字・小文字変換配列を用意してそれを引くようにするとか。。

 #include <ctype.h>
 char *str_toupper(char *str) {
  char *p = str;
  while (*p = toupper(*p)) ++p;
  return str;
 }
    • good
    • 0

素直にアスキーコード表どおりに変換すれば以下のように実現できます。


全角空白を使用しています。


#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
    • good
    • 0

文字(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';
}
とも書けます。
これを文字列終端まで繰り返せば良いでしょう。
    • good
    • 0

API は、


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

自分で作るというこだわりが無い限り、


標準関数で良いと思います。

http://www005.upp.so-net.ne.jp/h-masuda/cl/CStrP …

もし、自分で作りたければ以下のサイトの真ん中あたりが
参考になると思います。

http://www1.cts.ne.jp/~clab/hsample/Point/Point0 …
    • good
    • 0

★アドバイス


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報