C++で文字列内の英字の大文字・小文字を切り替える方法
このプログラムは、文字列に含まれるすべての英字について、大文字と小文字を入れ替える(トグルする)処理を行います。C++の標準ライブラリには toupper() や tolower() といった便利な関数が用意されており、同様の処理は簡単に実現できます。しかし本記事では、ASCIIコードの値を直接計算することで大文字・小文字を変換する方法を解説します。
アルゴリズム
START
Step-1: char型の配列を宣言する
Step-2: 各文字のASCII値が 'A'(65) 以上 'Z'(90) 以下かどうかを判定する
Step-3: 各文字のASCII値が 'a'(97) 以上 'z'(122) 以下かどうかを判定する
ENDtoggleChars() 関数は、char型の配列を引数として受け取ります。続いてループで文字列を先頭から順に走査し、各文字のASCII値が 'A'〜'Z' の範囲(大文字)にあるか、'a'〜'z' の範囲(小文字)にあるかを判定します。大文字であれば小文字へ、小文字であれば大文字へと変換します。
ASCIIコードでは、同じ英字の大文字と小文字の差は常に一定('a' - 'A' = 32)であるため、この差分を加算・減算するだけで変換が可能です。数字や記号など、英字以外の文字はそのまま維持されます。
サンプルコード
#include<iostream>
using namespace std;
void toggleChars(char str[]){
for (int i=0; str[i]!='\0'; i++){
if (str[i]>='A' && str[i]<='Z')
str[i] = str[i] + 'a' - 'A';
else if (str[i]>='a' && str[i]<='z')
str[i] = str[i] + 'A' - 'a';
}
}
int main(){
char str[] = "ajay@kumar#Yadav";
cout << "String before toggle::" << str << endl;
toggleChars(str);
cout << "String after toggle::" << str;
return 0;
}このサンプルでは、入力された文字列に小文字・大文字・記号が混在しています。toggleChars() 関数を実行すると、英字部分だけが大文字・小文字で入れ替わり、@ や # などの記号は元のまま出力されます。
実行結果
String before toggle::ajay@kumar#Yadav String after toggle::AJAY@KUMAR#yADAV
-
【C++入門】文字列からアルファベット以外の文字をすべて削除する方法
C++における文字列とは、ヌル文字(\0)で終端される1次元の文字配列のことです。文字列には、アルファベットだけでなく、数字や特殊記号なども含まれる場合があります。本記事では、文字列からアルファベット以外の文字をすべて削除するC++プログラムを紹介します。サンプルプログラム#include <iostream> using namespace std; int main() { char str[100] = "String@123!!"; int i, j; &nb
-
C++で文字列の長さを求める方法:基本テクニックとstrlen()関数の使い方
C++における文字列とは、ヌル文字(\0)で終端される1次元の文字配列のことです。文字列の長さとは、このヌル文字より前に存在する文字数を指します。例えば、次のような文字列を考えてみましょう。char str[] = The sky is blue; 上記の文字列に含まれる文字数 = 15それでは、文字列の長さを求めるプログラムを見ていきましょう。例1:whileループを使って文字数をカウントする方法#include<iostream> using namespace std; int main() { char str[] = Apple; &n