パソコンなどの話題を書いていきます。
前のページではPHPを使用しN-gram分割を行っていましたが、今回はC言語で行います。
ですが、C言語ではUTF-8を扱う処理がないため自前で処理しています。
0xffffffe0-0xffffffef の文字が来たら3文字としてみなします。
#include <stdio.h>
#include <string.h>
int main(){
char* moji = "最近Twitterにハマっています。";
int i = 0, num = 0,charNum = 0;
char c;
for(i = 0;i < strlen(moji);i++) {
c = moji[i];
if(c >= 0xffffffe0 && c <= 0xffffffef) {
num = 2;
} else if(c >= 0xffffff80 && c <= 0xffffffbf) {
num--;
}
printf("%c", c);
if(num == 0){
printf("n");
charNum++;
}
}
printf("%s(%d, %d)n", moji, charNum, strlen(moji));
}
実行結果
最
近
T
w
i
t
t
e
r
に
ハ
マ
っ
て
い
ま
す
。
最近Twitterにハマっています。(18, 40)
末尾の(18, 40)というのは文字数です。strlenではUTF-8の文字として認識しないため40byteという値を表示しています。
HandyReader : C/C++,Java等のソースコードに色付けをしてくれるアプリです。