カテゴリー別アーカイブ: プログラミング小ネタ

C++で拡張ユークリッド互除法

こんにちは、Sayahamittです。

 

だいぶご無沙汰してしまいましたが久々のブログ更新です。

 

2つの整数の最大公約数を高速に求められるユークリッド互除法をなんとなく実装してみました。

意味は…ないです…w

もしかしたらそのうち簡単なRSA暗号とかもやってみるかも。

 

テクニカルなコーディングはできないので、教科書に書いてあったアルゴリズムをそのままクラスとして実装しました。

続きを読む

Java 標準入力待ちでスレッドをブロックさせない方法

こんにちはSayahamittです。

 

Javaでマルチスレッドなコードを書いている時に、あるスレッドでユーザーから標準入力待ちをする必要がありました。さらに、そのスレッドは他のスレッドと連動していて、他方のスレッドが終了したらそのスレッドも即座にかつ自動的に終了しなければなりません。

 

ご多分に漏れず僕はソッコーで躓きました。二日間も。

 

問題になったのはSystem.inを読むBufferdReaderでreadline()を行うと標準入力待ちになり、ユーザーがEnterキーを押してくれるまでそのスレッドの終了はおろか、interrupt()も出来ないことです。

しかし、僕が想像もしなかったスマートな解決策がありました。

続きを読む

UTF8なstring入れたらShiftJISなstring出てくる関数作った

こんにちは、Sayahamittです。

 

Macで書いていたC++コードをWindows VC++に持ってきたら文字コードでハマったのでメモしておきます。

 

今回は引数にUTF8エンコードのstd::string型文字列を取り、ShiftJISエンコードのstd::string文字列を返す関数と、その逆をやる関数を作りました。

バリバリのWindows API依存コードです。ごめんなさいm(__)m

 

Windowsでは内部的な処理にはUnicodeが使われているにも関わらず、コンソールにおける入出力を始めAPIなど、ユーザーとのインターフェースには未だにShift-JISが使われているようで、UTF8など多バイト文字を直接利用出来ません。

WindowsAPIなんて殆ど触ったことがない自分も、もれなくこの問題に引っかかりました。

Win API を利用する場合にはMultiByteToWideCharメソッドとWideCharToMultiByteメソッドを用いてUTF8とShiftJISの相互変換が実現できるようです。

続きを読む

C言語で逆ポーランド記法電卓を作った

こんにちはSayahamittです。

さて今回はC言語で逆ポーランド記法(スペース区切り)電卓を作ってみました。

文字列の動的確保とか、リストでスタックを実装したりとかしたので備忘録として残しておこうと思います。

(…Twitterクライアント?…(やってますよ…OOPとC++難しい…))

 

仕様っぽいもの

今回作った電卓では、四則演算が逆ポーランド記法(スペース区切り)によって書かれた数式を文字列入力として受け取り、スタックを利用して計算することにしました。和差積商以外の演算や関数はエラーを返すこととします。

また、入力桁数に制限があるとつまらないので、mallocを使って文字配列を動的確保し、

それに伴いスタックも双方向リストを用いて動的に伸縮できるように実装することとしました。

動的確保のアルゴリズムは、文字列を伸ばす場合には容量が増えた後の全体を格納するのに必要なメモリを丸々全部確保し直すものとしました。

続きを読む

C++でURLエンコード

C++でツイッタークライアントなぞ作ろうと思ったはいいものの、いざ始めてみると分からないことが多すぎて何をするにも時間が掛かって仕方がない…

そんな僕の無知と実力の無さを物語るつまづき第一弾!!

HTTPリクエストってURLエンコーディングしないといけないの?

なんて事もちゃんと理解してなかったので自戒を込めてURLエンコーダを書きました。
続きを読む