‘C/C++’ カテゴリーのアーカイブ

Hello Yacc & Lex World

2010年6月18日 金曜日

最近ちまちまとyacc/lex(実際はbison/flex)を触っているのですが、やたらと苦労しています。真面目に学校に行ってなかったのが悔やまれますが、愚痴っていても仕方が無いのでメモ書きです。

ここでは以下の様なTinyCモドキのコードをyaccとlexで扱ってみます。

main()
{
    var i;
    var s;
    s = 0;
    i = 0; 
    while(i < 10){
	  s = s + i;
	  i = i + 1;
    }
    println("s = %d",s);
}

TinyCについてはコチラのページを参考にさせて頂きました。何故モドキかと言うと、僕にはTinyCですら複雑だったので、TinyCを更に小さくしたモドキをパースする事にしました。ヘタレですいません。

(続きを読む…)

Cでのコマンドラインパラメータの受け方メモ

2010年5月3日 月曜日

Cのプログラムでコマンドラインからパラメータを受けたい訳ですが、自力でやろうとしてもargv経由で文字列配列が渡されるだけなので非常に面倒です(LL病な自分としてはハッシュで欲しい)。例えば以下のgrepコマンドの用に複数のパラメータを順不同で受けたいとかになると、かなり大変ですね。

$ grep -nH -I -R search_text *

そこで、なんか無いのかと思って調べてみるとgetoptを使えば良い事がわかりました。

(続きを読む…)

浮動小数点の情報落ちを追って見た

2010年2月19日 金曜日

今日topcoderの問題を解いてて、浮動小数点の誤差ではまりました。問題を単純化したコードが以下になります。

#include <iostream>
using namespace std;
 
int main(int argc, char** argv) {
    double small = 1e-18;
    double big   = 1;
    double added = small + big;
    cout << added << endl;  // 1が出力される。(small分が切り捨てられてる)
}

加算を行った結果、小数点以下の値が切り捨てられています。一瞬何が起こったのか解らなかったのですが、折角なので追ってみる事にしました。

(続きを読む…)

flockのサンプルコード

2009年12月5日 土曜日

マルチプロセスな処理をするのに必須な排他制御ですが、flockのサンプルが見つからなかったので書いてみました。

(続きを読む…)

C++で文字列のsplitにstringstreamが使える気がする

2009年11月26日 木曜日

久々にtopcoderをやってみたんですが、1問しか解けませんでした。終わった時は練習しようと思うんですが、中々実行できないです。。

久々すぎて文字列のsplitすら出来なくて、そんな馬鹿なと思って調べてみると、STLのstringってsplitメソッドが無いんですね。仕方ないのでその辺のコードをコピペしたんですが、終わってから皆さんのコードを見るとstringstreamでsplitするのが、常套手段っぽくて、初めて目にしたのでメモ書きです。

(続きを読む…)