質問です

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
sui

質問です

#1

投稿記事 by sui » 14年前

「私はsuiです。私は猫が好きです。私設でかっています」

と言う文章があったとして、この文から漢字だけを抽出し、カウントするプログラムを作りたいのですが、なかなかうまくいきません。

出力希望
私:3
猫:1
設:1

このような感じで出力できるようになりたいのですが、なんとかならないでしょうか?

non
記事: 1097
登録日時: 15年前

Re: 質問です

#2

投稿記事 by non » 14年前

漢字コードは何ですか?
また、うまくいかないプログラムを添付してください。
non

井上

Re: 質問です

#3

投稿記事 by 井上 » 14年前

// 適当ですがこんな感じでしょうか ↓↓?
#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();
}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 質問です

#4

投稿記事 by softya(ソフト屋) » 14年前

井上さん、こちらは始めてですか?
回答していただくのはありがたいのですが、ぜひ、こちらのフォーラムルールをお読みください。
http://dixq.net/board/board.html
面倒だと思われるでしょうが、アドバイスをしていただけると助かります。

それと漢字コードがsui さんから提示されていないので、その方法で良いかはなんとも言えないのではないでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る