// 適当ですがこんな感じでしょうか ↓↓?
#include <stdio.h>
#include <string.h>
// For Shift-JIS
// 漢字出現回数テーブル
#define KANJI_TABLE_MAX (100)
typedef struct {
char kanji[3]; // 漢字 2バイト + \0
int count; // 表示回数
} KANJI_TABLE;
static KANJI_TABLE kanji_table[ KANJI_TABLE_MAX ]; // グローバルで宣言したので0初期化
// 漢字チェック(適当)
int is_sjis_kanji( unsigned char c )
{
//
http://www.seiai.ed.jp/sys/text/java/sh ... table.html
// 亜 <= c && c <= 滌 || 漾 <= c && c <= ?
if ( ( 0x88 <= c && c <= 0x9f ) || (0xe0 <= c && c <= 0xfc ) ) {
// 漢字
return 1;
}
return 0;
}
// 漢字テーブルに挿入
int insert_kanji( char* kanji )
{
for( int i = 0; i < KANJI_TABLE_MAX; i++ )
{
// 空きか登録済みか探す
KANJI_TABLE* p = &kanji_table[ i ];
if( p->count == 0 ) {
strcpy( p->kanji, kanji );
p->count = 1;
return 1;
}
else if( strcmp( p->kanji, kanji ) == 0) {
p->count ++;
return 1;
}
}
return 0;
}
// 漢字テーブルを表示
void print_kanji()
{
for( int i = 0; i < KANJI_TABLE_MAX; i++ )
{
// 空きか登録済みか探す
KANJI_TABLE* p = &kanji_table[ i ];
if( p->count == 0 )
break;
// 漢字 + 表示回数
printf("%s:%d\n", p->kanji, p->count );
}
}
int main(void)
{
char* str = "私はsuiです。私は猫が好きです。私設でかっています";
for( char*p = str; *p != '\0'; p++ ) {
// 漢字チェック!
if( is_sjis_kanji( *p ) ) {
char letter[ 3 ] = { 0 };
letter[ 0 ] = *(p+0);
letter[ 1 ] = *(p+1);
///printf("%s\n", letter );
// 漢字テーブルに登録!
insert_kanji( letter );
p++; // Shift-JISでは漢字は2バイトなので+1する
}
}
// 漢字テーブルを表示
print_kanji();
}