連載
【問題11】文字列の長さと文字種類の判別:完全マスター! 組み込みC言語プログラミング(12)(1/4 ページ)
C言語を使ったマイコン制御プログラムの“イロハ”を解説する本連載。複数条件を満たすパスワード確認プログラムを通じて、複数関数の使い方とフラグの立て方を学びます。
本連載では、これから組み込みシステムのプログラミングを学びたい人向けに、C言語を使ったマイコン制御プログラムの“イロハ”を解説していきます。
毎回少しずつステップアップしていけるよう、本文の最後で問題を出し、次回その解答と解説を紹介していきます。では早速、前回の問題を振り返ってみましょう。
問題11:
文字列を入力し、その文字列が以下の条件のパスワードとして成り立つか表示します。
- 英小文字・英大文字・数字を少なくとも1文字含むこと。
- 英数字以外の文字が含まれていないこと。
- 長さが6文字以上、12文字以下であること。
問題11の解答
問題11は「文字列を入力し、ある条件下でパスワードとして成立するか」を調べるものでした。このプログラムでは、文字列の長さを求め、また文字種別(英大文字、英小文字、数字)を判定しなければなりません。以下にプログラム例を示します。
#include <stdio.h> #include <ctype.h> #define CH_LOWER 1 #define CH_UPPER 2 #define CH_NUMBER 4 #define CH_OTHER 8 #define CH_WORD (CH_LOWER | CH_UPPER | CH_NUMBER) void main(void) { char password[50], *p; int flg, len; printf("パスワードを入力してください->"); scanf("%s", password); flg = 0; for (p = password; *p != '¥0'; p++) { char ch = *p; if (islower(ch)) flg |= CH_LOWER; else if (isupper(ch)) flg |= CH_UPPER; else if (isdigit(ch)) flg |= CH_NUMBER; else flg |= CH_OTHER; } len = p - password; if ((flg == CH_WORD) && (len >= 6 && len <= 12)) printf("OK¥n"); else printf("BAT¥n"); }
「password.c」
password.cを実行すると、次のような結果になります。
Copyright © ITmedia, Inc. All Rights Reserved.