ある文字列が与えられたとき、その中に含まれているASCIIコードで表現できないマルチバイト文字列だけを取り出したかった。例えば、「aあbcいdeうf」という文字列が与えられたときには、「あいう」を取り出すといった処理をしたい。
これぐらいの処理ならば探せばすぐに見つかるかと思ったが、それらしいものが見つからない。
ある文字列が与えられたとき、その中に含まれているASCIIコードで表現できないマルチバイト文字列だけを取り出したかった。例えば、「aあbcいdeうf」という文字列が与えられたときには、「あいう」を取り出すといった処理をしたい。
これぐらいの処理ならば探せばすぐに見つかるかと思ったが、それらしいものが見つからない。
先日、久しぶりにLinux上でC言語を使ってプログラムを作ることになった。普段は、Windows上でVisual Studioを使って作るし、C言語よりもC++を使うことが多いので、くだらないところで30分ほど悩んでしまった。
問題となったのは、gccでコンパイルすると以下のような警告が出て、実行するとセグメントエラーが表示されてしまうというものだった。
warning: cast to pointer from integer of different size
ユーザにCSSを入力させる場合、一部のプロパティやプロパティの値を禁止しておかない危険な場合がある。例えば、expression(IEの独自拡張)を使えばプロパティの値にJavaScriptを書いて実行させることができるし、background-imageプロパティを使えば不快な画像を表示させることができてしまう。
そのため、ユーザにCSSを入力させる場合には、その入力されたCSSを解析する必要がある。Pythonではcssutilsというライブラリを使ってCSSをパースすることができる。
PythonのHTMLパーサであるBeautifulSoupは、多くのHTMLパーサと同じように壊れたHTMLでも読み込むことができる。開始タグだけ書いて終了タグを書き忘れたものがあれば終了タグを追加してくれるし、終了タグだけがあればそれを取り除いてくれる。以下の文字列のように<だけがあり>がない壊れたタグがある場合にはそれ以降の文字列が取り除かれる。
ここから <input type = "text" ここまで
ここから
この壊れたタグがあった場合の動作に関しては、稀に問題になることがある。
最小値minと最大値maxが与えられたときに、その範囲から重複しないようにn個の数値を取り出す関数を作りたい。例えば、0~100までの範囲から重複しないように10個の数値を取り出す。
[ 7, 18, 20, 45, 47, 62, 70, 80, 89, 91 ]
とりあえず、3つの方法が考えられたのでそれぞれ実装して速度比較をしてみた。