Cの最近のブログ記事

タイトルは適当

ネタ元→ 低レイヤの文字列操作 - おさかなラボ

ちょっとC書いてて、あるファイルがWindowsのスクリーンセーバーかどうか拡張子(.scr)で判別するロジックで、拡張子に大文字小文字がことがあることが判明したあと、ものすごくロジック書くのが面倒くさくなってきた俺はイラっときて次のように書いた。
   char *p = filename + strlen(filename);
    char lc = 'a' - 'A';
    if((*--p|lc) == 'r' && (*--p|lc) == 'c' && 
       (*--p|lc) == 's' &&  *--p     == '.'){
        // みつかったよ!
    }

まぁ、別にコードは間違ってはいないんだろうけど、

/* filename が ".scr" で終わってるかどうかチェックする */
char *p = filename + strlen(filename) - 4; /* 4 は ".scr" の文字列長 */
if ( p > filename && /* filename の文字列長が 4 より多いことのチェック */
    p[0] == '.' &&
    tolower(p[1]) == 's' &&
    tolower(p[2]) == 'c' &&
    tolower(p[3]) == 'r' )
{
  /* 見つかったよ! */
}

とかの方が読みやすいんじゃないかな。拡張子名判定なんてそんなカリッカリにチューニングするようなもんでもないだろうし。

ハノイの塔 をたくさんの言語で。

唐突に書きたくなって、頑張って色々書いてみた。(残念ながらスタック型言語(Brainf*ckとかwhitespaceとかは無い)

ハノイの塔回答プログラムのポイントはおおよそ2点

  • 関数/サブルーチン等の再帰呼び出し処理
  • 経過を出力する際の文字列フォーマッティング

それでは、どうぞ

トップページが寂しくなってきたのでとりあえず投下

さて、どうやりましょ。ビギナなら

void func(int cond)
{
  int n;
  if ( cond )
    n = 0;
  else
    n = 1;
}

なんてのもありですかね。しかしこの程度なら3項演算子を使って

void func(int cond)
{
  int n = cond ? 0 : 1;
}

の方がスマートですね。しかし条件が複雑になってくると3項演算子では読みにくくなるので、前者の方がよいかもです。

インスパイア元は こちら

#include <stdio.h>
int main() { return EOF == puts("Hello, world"); }

追記.. トラックバック指定してないのに勝手にトラックバック送っちゃった (・・;
元記事は Jython の話なのに。。 申し訳ない m(_ _)m

AUTHOR

  • turugina (虎王 剱奈)
  • E-mail: turugina {at} floralcompany.jp
  • pixiv
  • ニジエ

2014年5月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

アーカイブ

OpenID対応しています OpenIDについて
Powered by Movable Type 5.2.10

- 警 告 -

本サイトにはいわゆる「18禁画像」(イラスト)へのリンクが存在します。 未成年の方や、その手の画像に不快感を覚える方は、 該当記事(「えちぃの」及び「ちょっとえちぃの」カテゴリ) をご覧にならないようお願いいたします。

上記を理解した上で非表示のブログパーツを表示する
あわせて読みたいブログパーツ
ついった
drawr/pixiv/twitpic