上の記事の様にtolower()などを使わずに、大文字、小文字の変換をするときはASCIIコードを小文字に減算して大文字に変換、大文字を加算して小文字に変換するというやり方を多く見かけます。
その場合、大文字を減算、小文字を加算しないようにASCIIコードで変換する範囲を指定します
C++.C++
//https://webkaru.net/clang/conversion-string-lower-to-upper-case/より引用
/* アルファベットの小文字なら変換 */
if(str[i]>=97&&str[i]<=122)
str[i]=str[i]-32;
でも文字のことを考えているときに数字のことを考えるのは面倒くさいので小文字の場合は小文字を引いて大文字を足す、大文字の場合は大文字を引いて小文字を足す、という風にしました。
小文字
qiita.C++
/* アルファベットの小文字なら変換 */
if('a'<=str[i]&&str[i]<='z')
str[i]=char(str[i]-'a'+'A'); //char()で括らないと数字として表示される
//('a'-'a'==0 → 0+'A'=='A'),('b'-'a'==1 → 1+'A'=='B')....
//('z'-'a'==25 → 25+'A'=='Z')
大文字
qiita.C++
/* アルファベットの大文字なら変換 */
if('A'<=str[i]&&str[i]<='Z')
str[i]=char(str[i]-'A'+'a'); //char()で括らないと数字として表示される
//('A'-'A'==0 → 0+'a'=='a'),('B'-'A'==1 → 1+'a'=='b')....
//('Z'-'A'==25 → 25+'A'=='Z')
(-'a'+'A')*(1)で小文字変換
(-'a'+'A')*(-1)で大文字変換
とできるなら応用ができそう