【C++入門】文字列からアルファベット以外の文字をすべて削除する方法
C++における文字列とは、ヌル文字('\0')で終端される1次元の文字配列のことです。文字列には、アルファベットだけでなく、数字や特殊記号なども含まれる場合があります。
本記事では、文字列からアルファベット以外の文字をすべて削除するC++プログラムを紹介します。
サンプルプログラム
#include <iostream>
using namespace std;
int main() {
char str[100] = "String@123!!";
int i, j;
cout<<"String before modification: "<<str<<endl;
for(i = 0; str[i] != '\0'; ++i) {
while(!( (str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z') || str[i] == '\0') ) {
for(j = i; str[j] != '\0'; ++j) {
str[j] = str[j+1];
}
}
}
cout<<"String after modification: "<<str;
return 0;
}実行結果
String before modification: String@123!! String after modification: String
プログラムの解説
上記のプログラムでは、外側のforループを使って文字列を先頭から順に走査し、不要な文字の除去を行っています。具体的な処理の流れは以下のとおりです。
- 現在注目している文字が、小文字('a'〜'z')・大文字('A'〜'Z')・ヌル文字('\0')のいずれにも該当しない場合、それはアルファベット以外の文字であると判断します。
- 該当する文字が見つかった場合、whileループの中で、その文字より右側にあるすべての文字を1つずつ左へシフトします。このシフト処理は、内側のforループで変数
jを使って実現しています。 - 文字を左に詰めることで、アルファベット以外の文字が実質的に削除されます。whileループは同じ位置に対して再判定を行うため、連続した非アルファベット文字にも対応できます。
この削除処理を示すコードの抜粋は以下のとおりです。
削除処理のコード抜粋
for(i = 0; str[i] != '\0'; ++i) {
while(!( (str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z') || str[i] == '\0') ) {
for(j = i; str[j] != '\0'; ++j) {
str[j] = str[j+1];
}
}
}結果の出力
文字列の修正が完了したら、最終的な結果を出力して表示します。
cout<<"String after modification: "<<str;
このように、単純なループ処理を組み合わせることで、標準ライブラリの関数に頼らずとも、文字列から特定の種類の文字だけを取り除くことが可能です。なお、実務では <cctype> ヘッダーの isalpha() 関数を利用すると、文字がアルファベットかどうかの判定をより簡潔に記述できるため、状況に応じて使い分けるとよいでしょう。
-
Javaで文字列からアルファベット以外の文字をすべて削除する方法
Javaのsplit()メソッドは、区切り文字を表す文字列を引数として受け取り、その区切り文字をもとに文字列をトークン(単語)の配列へと分割します。2つの区切り文字の間にある部分が1つのトークンとして扱われます。例えば、半角スペース「 」を区切り文字としてこのメソッドに渡すと、スペースとスペースの間にある単語を1つのトークンとみなし、元の文字列に含まれる単語の配列を返します。なお、指定した区切り文字が文字列中に存在しない場合は、文字列全体を1つの要素とする配列が返されます。また、正規表現「\\W+」は、文字列内のすべてのアルファベット以外の文字(句読点、スペース、アンダースコア、特殊記号など)
-
Pythonで文字列から英数字以外の文字を削除する方法(正規表現を使った実装例)
Pythonで文字列から英字と数字以外のすべての文字を削除したい場合、正規表現を利用するのが最も簡単で効率的な方法です。あらかじめパターンとなる正規表現を定義し、対象の文字列に対してそのパターンを適用することで、不要な文字を一括して取り除くことができます。サンプルコード以下は、英数字以外の文字を削除する具体的な実装例です。import re my_string = python123:, .@! abc print(元の文字列:) print(my_string) result = re.sub([\W_]+, , my_string) print(処理後の文字列:) print(re