ショッピングモール  Personal Health / Men's Health ( Impotence )


掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.4836

漢字か平仮名の区別
投稿者---so(2005/11/10 23:03:19)


環境
OS: Windows
言語: C言語

C言語であるファイル(data.txt)を読み取り文章を文節に分割するプログラムを書きたいです。
例)ファイル名 data.txt
  プログラム prog.c があるとします。

 data.txtの中身
私は自転車に乗っています。

 prog data.txt
私は
自転車に
乗っています


とこんな感じにしたいのです。ファイル名を読み取る作業は以下に作ってみました。しかし、このあとファイルの中身を読み取って漢字と平仮名を区別する作業でいきずまってしまいました。アドバイスをお願いします。

#include <stdio.h>

int main(int argc,char *argv[]){
    FILE *fp;
    char h[256];
    int a[256];
    int i;
  if(argc!=2){
    exit(1);
  }
  if((fp=fopen(argv[1],"r"))==NULL){
    exit(1);
  }

            
  fclose(fp);
  return(0);
}




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:漢字か平仮名の区別 4837 επιστημη 2005/11/10 23:13:24
<子記事> Re:漢字か平仮名の区別 4838 Blue 2005/11/10 23:20:34


No.4837

Re:漢字か平仮名の区別
投稿者---επιστημη(2005/11/10 23:13:24)


> 漢字と平仮名を区別する作業でいきずまってしまいました。

全ての平仮名をひとつずつ含む文字列 "あいうえお…" を用意し、
文字xがその中に含まれるなら、xは平仮名です。



この投稿にコメントする

削除パスワード

No.4838

Re:漢字か平仮名の区別
投稿者---Blue(2005/11/10 23:20:34)


カナリムズイですねこれは。
日本語文の構文解析ということになるのでしょうか?
# 英文より文字コードの面、日本語のつくりの面からみても何十倍かムズそう。

単に平仮名とその他を区別したいだけなら
平仮名一覧リストを作っておいて、そのリストにあれば平仮名であるという判定にすればいいと思います。
# 別にShiftJISの文字コードの比較でもよさそうですけどね。


この投稿にコメントする

削除パスワード

No.4839

Re:漢字か平仮名の区別
投稿者---so(2005/11/11 00:06:09)


strcmpとか使ったりした方がいいのですかね?
JISの文字コードは使おうと思ってたんですが・・・。
ファイルから1文字(1byte)ずつ読み取るには何を使えばいいですかね?



この投稿にコメントする

削除パスワード

No.4840

Re:漢字か平仮名の区別
投稿者---Blue(2005/11/11 00:11:05)


> ファイルから1文字(1byte)ずつ読み取るには何を使えばいいですかね?
fgetc

Shitf-JIS全角文字だと2バイトなので、fgetsで1行単位に読んだほうがいいかも



この投稿にコメントする

削除パスワード

No.4841

Re:漢字か平仮名の区別
投稿者---so(2005/11/11 00:20:11)


ありがとうございます。とりあえずがんばってみます。


この投稿にコメントする

削除パスワード

No.4842

Re:漢字か平仮名の区別
投稿者---so(2005/11/11 01:26:35)


とりあえずfgetcで作ってみました。
でも実行するとSHIFTJISコード(数字)で出ちゃうんですがどのようにしたらちゃんと文字になおりますか?作ったプログラムは以下のとおりです。

#include <stdio.h>

int main(int argc,char *argv[]){
    FILE *fp;
    
    int a[256];
    int i=0;
    int c,j;
  if(argc!=2){
    exit(1);
  }
  if((fp=fopen(argv[1],"r"))==NULL){
    exit(1);
  }
    while ( (c=fgetc(fp)) != EOF ){
        a[i]=c;i++;
    }

    printf("%d%d ",a[0],a[1]);

    for(j=2;j<=i;j++){
        if(130 != a[j] && 130 == a[j-2]){
            printf("\n%d%d ",a[j],a[j+1]);j=j+1;
        }
    else{
            printf("%d%d ",a[j],a[j+1]);j=j+1;
        }
    }

  fclose(fp);
  return(0);
}



この投稿にコメントする

削除パスワード

No.4843

自己解決しました。
投稿者---so(2005/11/11 02:35:08)


自分の参考書に%cがなかったので悩みましたがいろいろネットを見ていたら解決できました。
%dを%cになおせば文字に変わるんですね。
ありがとうございました!!


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧




掲示板提供:Real Integrity