ここから本文です

解決済みの質問

この関数は英小文字を英大文字に変換する関数なのですが *ptr =*ptr-('a'-'A'); の...

r_04_22さん

この関数は英小文字を英大文字に変換する関数なのですが
*ptr =*ptr-('a'-'A');
のやっていることがわかりません。
どなたか解説お願いします。

void replace_digit(char *str)
{
char *ptr = str;

while (*ptr){
if(*ptr >= 'a' && *ptr <= 'z')
*ptr =*ptr-('a'-'A');
*ptr++;
}

*ptr = '\0';
}

違反報告

ベストアンサーに選ばれた回答

shimix703さん

*ptr =*ptr-('a'-'A');

小文字と大文字の数値の差(小文字の方が数値は大きいです)を小文字に加算して大文字にしている・・・というだけだと思います。

#'a'は0x61(97)、'A'は0x41(65)なので差は0x20(32)ですね

質問した人からのコメント

  • 理解できました。ありがとうございます。
  • コメント日時:2012/2/14 15:51:39

アバター

この質問・回答は役に立ちましたか?
役に立った!

お役立ち度:お役立ち度 1点(5点満点中)1人が役に立つと評価しています。

ベストアンサー以外の回答

(1件中1〜1件)

 

hideakira_2010さん

0x20 のビットを倒せば良いのです。

*ptr &= ~0x20 ;

この質問に付けられたタグ

タグとは

知恵ノートとは?

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。

お客様自身の責任と判断で、ご利用ください。

話題のキーワード

[カテゴリ:C言語関連]

ただいまの回答者

01時41分現在

2320
人が回答!!

1時間以内に4,209件の回答が寄せられています。

>>回答ひろばに行く


知恵コレに追加する

閉じる

知恵コレクションをするID/ニックネームを選択し、「追加する」ボタンを押してください。
※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。

ほかのID/ニックネームで利用登録する