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

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

» 2014年10月17日 11時00分 公開
[横田一弘 埼玉県立新座総合技術高等学校 教諭,MONOist]
photo

 本連載では、これから組み込みシステムのプログラミングを学びたい人向けに、C言語を使ったマイコン制御プログラムの“イロハ”を解説していきます。

 毎回少しずつステップアップしていけるよう、本文の最後で問題を出し、次回その解答と解説を紹介していきます。では早速、前回の問題を振り返ってみましょう。


問題11:

文字列を入力し、その文字列が以下の条件のパスワードとして成り立つか表示します。

  • 英小文字・英大文字・数字を少なくとも1文字含むこと。
  • 英数字以外の文字が含まれていないこと。
  • 長さが6文字以上、12文字以下であること。

問題11の解答

 問題11は「文字列を入力し、ある条件下でパスワードとして成立するか」を調べるものでした。このプログラムでは、文字列の長さを求め、また文字種別(英大文字、英小文字、数字)を判定しなければなりません。以下にプログラム例を示します。

  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #define CH_LOWER 1
  4. #define CH_UPPER 2
  5. #define CH_NUMBER 4
  6. #define CH_OTHER 8
  7. #define CH_WORD (CH_LOWER | CH_UPPER | CH_NUMBER)
  8. void main(void)
  9. {
  10. char password[50], *p;
  11. int flg, len;
  12. printf("パスワードを入力してください->");
  13. scanf("%s", password);
  14. flg = 0;
  15. for (p = password; *p != '¥0'; p++) {
  16. char ch = *p;
  17. if (islower(ch)) flg |= CH_LOWER;
  18. else if (isupper(ch)) flg |= CH_UPPER;
  19. else if (isdigit(ch)) flg |= CH_NUMBER;
  20. else flg |= CH_OTHER;
  21. }
  22. len = p - password;
  23. if ((flg == CH_WORD) && (len >= 6 && len <= 12))
  24. printf("OK¥n");
  25. else
  26. printf("BAT¥n");
  27. }
「password.c」

 password.cを実行すると、次のような結果になります。

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

Copyright © ITmedia, Inc. All Rights Reserved.