C言語で文字列に特殊文字が含まれているか判定するプログラム
文字列 str[] が与えられたとき、その文字列に特殊文字が含まれているかどうかを判定します。特殊文字が含まれている場合は「The String is not accepted(文字列は受け付けられません)」と出力し、含まれていない場合は「The string is accepted(文字列は受け付けられます)」と出力します。
ここでいう特殊文字とは、数字でもアルファベットでもない文字のことで、具体的には以下のような記号が該当します。
!@#$%^&*()+=-][';/.,{}|:"<>?`~
C言語では、if-else 文を使ったアプローチでこの問題を解決できます。
入力: str[] = {"tutorials-point"}
出力: the string is not accepted
入力: str[] = {"tutorialspoint"}
出力: The string is accepted
問題を解くための基本的なアプローチ
- 文字列全体を先頭から順に走査(トラバース)します。
- 各文字が特殊文字かどうかを調べ、特殊文字が見つかった時点で「The string is not accepted」を出力して処理を中断(break)します。最後まで特殊文字が見つからなければ「The string is accepted」を出力します。
別のアプローチ:正規表現の活用
Java をはじめ、正規表現をサポートしているプログラミング言語でコーディングする場合は、if-else による一つひとつの比較の代わりに、正規表現を使って特殊文字の有無をまとめてチェックできます。コードがシンプルになるだけでなく、処理速度の面でも有利な手法です。
アルゴリズム
開始
関数 int special_character(char str[], int n) 内
ステップ1 → 変数 i と flag を宣言し、flag を 0 に初期化する
ステップ2 → i = 0 から i < n の間、++i でループする
もし str[i] が '!' または '@' または '#' または '$'
または '%' または '^' または '&' または '*'
または '(' または ')' または '-' または '{'
または '}' または '[' または ']' または ':'
または ';' または '"' または '\'' または '<'
または '>' または '.' または '/' または '?'
または '~' または '`' のいずれかと一致した場合
「String is not allowed」を出力する
flag を 1 に設定する
break でループを抜ける
ステップ3 → flag == 0 である場合
「string is accepted」を出力する
関数 int main(int argc, char const *argv[]) 内
ステップ1 → str[] を {"Tutorials-point"} として宣言・初期化する
ステップ2 → n に strlen(str) の値を設定する
ステップ3 → special_character(str, n) を呼び出す
終了
実装例(C言語)
#include <stdio.h>
#include <string.h>
int special_character(char str[], int n){
int i, flag = 0;
for (i = 0; i < n; ++i){
// 文字列の各文字が特殊文字かどうかをチェック
if(str[i] == '!' || str[i] == '@' || str[i] == '#' || str[i] == '$'
|| str[i] == '%' || str[i] == '^' || str[i] == '&' || str[i] == '*'
|| str[i] == '(' || str[i] == ')' || str[i] == '-' || str[i] == '{'
|| str[i] == '}' || str[i] == '[' || str[i] == ']' || str[i] == ':'
|| str[i] == ';' || str[i] == '"' || str[i] == '\'' || str[i] == '<'
|| str[i] == '>' || str[i] == '.' || str[i] == '/' || str[i] == '?'
|| str[i] == '~' || str[i] == '`' ){
printf("String is not allowed\n");
flag = 1;
break;
}
}
// 特殊文字が1つも存在しない場合
if (flag == 0){
printf("string is accepted\n");
}
return 0;
}
int main(int argc, char const *argv[]){
char str[] = {"Tutorials-point"};
int n = strlen(str);
special_character(str, n);
return 0;
}
出力結果
上記のコードを実行すると、次の出力が得られます。
String is not allowed
この例では、文字列 "Tutorials-point" にハイフン(-)という特殊文字が含まれているため、「String is not allowed」と表示されます。もし "Tutorialspoint" のように特殊文字を含まない文字列を渡せば、「string is accepted」と出力されます。
-
Swiftで文字列が別の文字列を含んでいるか確認する方法
Swiftである文字列に別の文字列が含まれているかどうかを確認するには、2つの異なる文字列が必要です。1つは検索対象となる文字列、もう1つはその中に特定の文字列が含まれているかを調べる元となる文字列です。 ここでは、確認したい文字列を「point」、全体の文字列を「TutorialsPoint」、そして別の文字列として「one two three」を使用して説明します。Playgroundでこれらの文字列を使って実際に確認してみましょう。 この確認は、以下に示す2つの方法で行うことができます。まずは3つの異なる文字列を作成します。 var completeStr1 = Tutorials po
-
【Python】文字列がすべてユニークな文字で構成されているか判定する方法
本記事では、与えられた文字列に含まれる文字がすべて一意(ユニーク)であるかどうかを判定するPythonプログラムについて、その解法とアプローチをわかりやすく解説します。 問題の概要 文字列が入力として与えられたとき、その文字列に含まれるすべての文字が重複なく一意であるかどうかを判定します。たとえば「abcde」はすべて異なる文字で構成されているためTrue、「tutorialspoint」のように同じ文字が複数回出現する場合はFalseとなります。 アプローチ この問題は、以下のような手順で効率的に解くことができます。 ブール値の配列を用意する: 各インデックス i が「アルファベット(AS