連載
» 2014年10月17日 11時00分 UPDATE

完全マスター! 組み込みC言語プログラミング(12):【問題11】文字列の長さと文字種類の判別 (1/4)

C言語を使ったマイコン制御プログラムの“イロハ”を解説する本連載。複数条件を満たすパスワード確認プログラムを通じて、複数関数の使い方とフラグの立て方を学びます。

[横田一弘 埼玉県立新座総合技術高等学校 教諭,MONOist]
photo

 本連載では、これから組み込みシステムのプログラミングを学びたい人向けに、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を実行すると、次のような結果になります。

photo 「password.c」の実行結果
       1|2|3|4 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.