連載
【問題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.
