2011年09月27日

C言語の開発環境構築


1、ブラウザを起動してhttp://mergedoc.sourceforge.jp/にアクセス
2、Eclipse 3.7 Indigo Pleades All in Oneのリンクをクリック
3、C/C++のFull All in One(JREあり)のダウンロードのリンクをクリック
4、任意の場所にファイルを保存
5、pleiades-e3.7-cpp-jre_20110924.zipを解凍
6、解凍したフォルダpleiades-e3.7-cpp-jre_20110924をCドライブ直下にコピー
7、C:\pleiades-e3.7-cpp-jre_20110924\eclipseフォルダ内のeclipse.exeを選択
8、右クリックメニューの互換性タブを選択
9、特権レベルの「管理者としてこのプログラムを実行する」をチェック
10、OKボタンクリック
11、C:\pleiades-e3.7-cpp-jre_20110924\eclipseフォルダ内のeclipse.exeを起動
12、ワークスペースの選択ダイアログが表示します。任意の場所を選択して
OKボタンクリック。
13、メニューバーのファイルー新規ーCプロジェクトを選択
14、以下の情報を入力後に「完了」ボタンをクリック
・プロジェクト名:Hello
・プロジェクトタイプ
実行可能を展開し、Hello World ANSI Cプロジェクトを選択
・ツールチェーン
MinGW GCCを選択
15、メニューバーの「プロジェクト」−「すべてをビルド」を選択
16、プロジェクト・エクスプローラ
・srcフォルダを展開
・DebugフォルダのHello.exeを選択
・右クリックメニューの実行ーローカルC/C++アプリケーションを選択
17、Eclipseのコンソールに「!!!Hello World!!!」が表示されれば成功です。

なお、一部の作業手順をはぶいていますので、以下のサイトを参照してください。

Eclipse に C/C++ 開発ツール (CDT) をインストール
http://kkaneko.com/rinkou/javaintro/cdt.html
posted by rururu at 01:28| Comment(0) | TrackBack(0) | C言語

2010年01月18日

C言語で全角・半角変換


7年前に作ったC言語のプログラムを見つけました。
・半角カタカナを全角ひらがな
・半角カタカナを全角カタカナ
は仕事でつかえそうですが、なぜ「全角カタカナを半角カタカナ」に
する物を作ったのかが思い出せません。
C言語を仕事でやったことがないので仕事で実際に経験がある人が
いれば、問題点やもっと短いコードで書く方法などを聞いてみたいと
思います。
------------------------------------------------------------------------------------------------
#include

typedef struct
{
unsigned char hk[1];
unsigned char zh[2];
unsigned char zk[2];
} hz1;

typedef struct
{
unsigned char hk[2];
unsigned char zh[2];
unsigned char zk[2];
} hz2;


#define HZ2SIZE 26
#define HZ1SIZE 64

static hz2 t2[HZ2SIZE] =
{
{ 0xB3,0xDE /* ヴ */, 0x83,0x94 /* ヴ */, 0x83,0x94 /* ヴ */ },
{ 0xB6,0xDE /* ガ */, 0x82,0xAA /* が */, 0x83,0x4B /* ガ */ },
{ 0xB7,0xDE /* ギ */, 0x82,0xAC /* ぎ */, 0x83,0x4D /* ギ */ },
{ 0xB8,0xDE /* グ */, 0x82,0xAE /* ぐ */, 0x83,0x4F /* グ */ },
{ 0xB9,0xDE /* ゲ */, 0x82,0xB0 /* げ */, 0x83,0x51 /* ゲ */ },
{ 0xBA,0xDE /* ゴ */, 0x82,0xB2 /* ご */, 0x83,0x53 /* ゴ */ },
{ 0xBB,0xDE /* ザ */, 0x82,0xB4 /* ざ */, 0x83,0x55 /* ザ */ },
{ 0xBC,0xDE /* ジ */, 0x82,0xB6 /* じ */, 0x83,0x57 /* ジ */ },
{ 0xBD,0xDE /* ズ */, 0x82,0xB8 /* ず */, 0x83,0x59 /* ズ */ },
{ 0xBE,0xDE /* ゼ */, 0x82,0xBA /* ぜ */, 0x83,0x5B /* ゼ */ },
{ 0xBF,0xDE /* ゾ */, 0x82,0xBC /* ぞ */, 0x83,0x5D /* ゾ */ },
{ 0xC0,0xDE /* ダ */, 0x82,0xBE /* だ */, 0x83,0x5F /* ダ */ },
{ 0xC1,0xDE /* ヂ */, 0x82,0xC0 /* ぢ */, 0x83,0x61 /* ヂ */ },
{ 0xC2,0xDE /* ヅ */, 0x82,0xC3 /* づ */, 0x83,0x64 /* ヅ */ },
{ 0xC3,0xDE /* デ */, 0x82,0xC5 /* で */, 0x83,0x66 /* デ */ },
{ 0xC4,0xDE /* ド */, 0x82,0xC7 /* ど */, 0x83,0x68 /* ド */ },
{ 0xCA,0xDE /* バ */, 0x82,0xCE /* ば */, 0x83,0x6F /* バ */ },
{ 0xCB,0xDE /* ビ */, 0x82,0xD1 /* び */, 0x83,0x72 /* ビ */ },
{ 0xCC,0xDE /* ブ */, 0x82,0xD4 /* ぶ */, 0x83,0x75 /* ブ */ },
{ 0xCD,0xDE /* ベ */, 0x82,0xD7 /* べ */, 0x83,0x78 /* ベ */ },
{ 0xCE,0xDE /* ボ */, 0x82,0xDA /* ぼ */, 0x83,0x7B /* ボ */ },
{ 0xCA,0xDF /* パ */, 0x82,0xCF /* ぱ */, 0x83,0x70 /* パ */ },
{ 0xCB,0xDF /* ピ */, 0x82,0xD2 /* ぴ */, 0x83,0x73 /* ピ */ },
{ 0xCC,0xDF /* プ */, 0x82,0xD5 /* ぷ */, 0x83,0x76 /* プ */ },
{ 0xCD,0xDF /* ペ */, 0x82,0xD8 /* ぺ */, 0x83,0x79 /* ペ */ },
{ 0xCE,0xDF /* ポ */, 0x82,0xDB /* ぽ */, 0x83,0x7C /* ポ */ }
};

static hz1 t1[HZ1SIZE] =
{
{ 0xA0 /* */, 0x81,0x40 /* */, 0x81,0x40 /* */ },
{ 0xA4 /* 、 */, 0x81,0x41 /* 、 */, 0x81,0x41 /* 、 */ },
{ 0xA1 /* 。 */, 0x81,0x42 /* 。 */, 0x81,0x42 /* 。 */ },
{ 0xA5 /* ・ */, 0x81,0x45 /* ・ */, 0x81,0x45 /* ・ */ },
{ 0xDE /* ゙ */, 0x81,0x4A /* ゛ */, 0x81,0x4A /* ゛ */ },
{ 0xDF /* ゚ */, 0x81,0x4B /* ゜ */, 0x81,0x4B /* ゜ */ },
{ 0xB0 /* ー */, 0x81,0x5B /* ー */, 0x81,0x5B /* ー */ },
{ 0xA2 /* 「 */, 0x81,0x75 /* 「 */, 0x81,0x75 /* 「 */ },
{ 0xA3 /* 」 */, 0x81,0x76 /* 」 */, 0x81,0x76 /* 」 */ },
{ 0xA7 /* ァ */, 0x82,0x9F /* ぁ */, 0x83,0x40 /* ァ */ },
{ 0xB1 /* ア */, 0x82,0xA0 /* あ */, 0x83,0x41 /* ア */ },
{ 0xA8 /* ィ */, 0x82,0xA1 /* ぃ */, 0x83,0x42 /* ィ */ },
{ 0xB2 /* イ */, 0x82,0xA2 /* い */, 0x83,0x43 /* イ */ },
{ 0xA9 /* ゥ */, 0x82,0xA3 /* ぅ */, 0x83,0x44 /* ゥ */ },
{ 0xB3 /* ウ */, 0x82,0xA4 /* う */, 0x83,0x45 /* ウ */ },
{ 0xAA /* ェ */, 0x82,0xA5 /* ぇ */, 0x83,0x46 /* ェ */ },
{ 0xB4 /* エ */, 0x82,0xA6 /* え */, 0x83,0x47 /* エ */ },
{ 0xAB /* ォ */, 0x82,0xA7 /* ぉ */, 0x83,0x48 /* ォ */ },
{ 0xB5 /* オ */, 0x82,0xA8 /* お */, 0x83,0x49 /* オ */ },
{ 0xB6 /* カ */, 0x82,0xA9 /* か */, 0x83,0x4A /* カ */ },
{ 0xB7 /* キ */, 0x82,0xAB /* き */, 0x83,0x4C /* キ */ },
{ 0xB8 /* ク */, 0x82,0xAD /* く */, 0x83,0x4E /* ク */ },
{ 0xB9 /* ケ */, 0x82,0xAF /* け */, 0x83,0x50 /* ケ */ },
{ 0xBA /* コ */, 0x82,0xB1 /* こ */, 0x83,0x52 /* コ */ },
{ 0xBB /* サ */, 0x82,0xB3 /* さ */, 0x83,0x54 /* サ */ },
{ 0xBC /* シ */, 0x82,0xB5 /* し */, 0x83,0x56 /* シ */ },
{ 0xBD /* ス */, 0x82,0xB7 /* す */, 0x83,0x58 /* ス */ },
{ 0xBE /* セ */, 0x82,0xB9 /* せ */, 0x83,0x5A /* セ */ },
{ 0xBF /* ソ */, 0x82,0xBB /* そ */, 0x83,0x5C /* ソ */ },
{ 0xC0 /* タ */, 0x82,0xBD /* た */, 0x83,0x5E /* タ */ },
{ 0xC1 /* チ */, 0x82,0xBF /* ち */, 0x83,0x60 /* チ */ },
{ 0xAF /* ッ */, 0x82,0xC1 /* っ */, 0x83,0x62 /* ッ */ },
{ 0xC2 /* ツ */, 0x82,0xC2 /* つ */, 0x83,0x63 /* ツ */ },
{ 0xC3 /* テ */, 0x82,0xC4 /* て */, 0x83,0x65 /* テ */ },
{ 0xC4 /* ト */, 0x82,0xC6 /* と */, 0x83,0x67 /* ト */ },
{ 0xC5 /* ナ */, 0x82,0xC8 /* な */, 0x83,0x69 /* ナ */ },
{ 0xC6 /* ニ */, 0x82,0xC9 /* に */, 0x83,0x6A /* ニ */ },
{ 0xC7 /* ヌ */, 0x82,0xCA /* ぬ */, 0x83,0x6B /* ヌ */ },
{ 0xC8 /* ネ */, 0x82,0xCB /* ね */, 0x83,0x6C /* ネ */ },
{ 0xC9 /* ノ */, 0x82,0xCC /* の */, 0x83,0x6D /* ノ */ },
{ 0xCA /* ハ */, 0x82,0xCD /* は */, 0x83,0x6E /* ハ */ },
{ 0xCB /* ヒ */, 0x82,0xD0 /* ひ */, 0x83,0x71 /* ヒ */ },
{ 0xCC /* フ */, 0x82,0xD3 /* ふ */, 0x83,0x74 /* フ */ },
{ 0xCD /* ヘ */, 0x82,0xD6 /* へ */, 0x83,0x77 /* ヘ */ },
{ 0xCE /* ホ */, 0x82,0xD9 /* ほ */, 0x83,0x7A /* ホ */ },
{ 0xCF /* マ */, 0x82,0xDC /* ま */, 0x83,0x7D /* マ */ },
{ 0xD0 /* ミ */, 0x82,0xDD /* み */, 0x83,0x7E /* ミ */ },
{ 0xD1 /* ム */, 0x82,0xDE /* む */, 0x83,0x80 /* ム */ },
{ 0xD2 /* メ */, 0x82,0xDF /* め */, 0x83,0x81 /* メ */ },
{ 0xD3 /* モ */, 0x82,0xE0 /* も */, 0x83,0x82 /* モ */ },
{ 0xAC /* ャ */, 0x82,0xE1 /* ゃ */, 0x83,0x83 /* ャ */ },
{ 0xD4 /* ヤ */, 0x82,0xE2 /* や */, 0x83,0x84 /* ヤ */ },
{ 0xAD /* ュ */, 0x82,0xE3 /* ゅ */, 0x83,0x85 /* ュ */ },
{ 0xD5 /* ユ */, 0x82,0xE4 /* ゆ */, 0x83,0x86 /* ユ */ },
{ 0xAE /* ョ */, 0x82,0xE5 /* ょ */, 0x83,0x87 /* ョ */ },
{ 0xD6 /* ヨ */, 0x82,0xE6 /* よ */, 0x83,0x88 /* ヨ */ },
{ 0xD7 /* ラ */, 0x82,0xE7 /* ら */, 0x83,0x89 /* ラ */ },
{ 0xD8 /* リ */, 0x82,0xE8 /* り */, 0x83,0x8A /* リ */ },
{ 0xD9 /* ル */, 0x82,0xE9 /* る */, 0x83,0x8B /* ル */ },
{ 0xDA /* レ */, 0x82,0xEA /* れ */, 0x83,0x8C /* レ */ },
{ 0xDB /* ロ */, 0x82,0xEB /* ろ */, 0x83,0x8D /* ロ */ },
{ 0xDC /* ワ */, 0x82,0xED /* わ */, 0x83,0x8F /* ワ */ },
{ 0xA6 /* ヲ */, 0x82,0xF0 /* を */, 0x83,0x92 /* ヲ */ },
{ 0xDD /* ン */, 0x82,0xF1 /* ん */, 0x83,0x93 /* ン */ }
};


/*
シングルバイト (0x20 - 0x7E、0xA1 - 0xDF)
マルチバイト文字の先行バイト(0x81 - 0x9F、0xE0 - 0xFC)
マルチバイト文字の後続バイト(0x40 - 0x7E、0x80 - 0xFC)
無効な文字 (0x20 - 0x7E、0xA1 - 0xDF、
0x81 - 0x9F、0xE0 - 0xFC 以外の文字)
*/



/*
全角カタカナを半角カタカナにする
*/
void zenkana2hankana
(
unsigned char *sin, /* 入力文字列へのポインタ。ヌル終端文字列 */
unsigned char *sout /* 出力文字列へのポインタ。ヌル終端文字列にして返す */
)
{
static unsigned char *pin,*pout,c[2],b2;
static int slen,i;

slen = strlen(sin);
pin = sin ;
pout = sout;

while(1)
{
if ( pin >= sin + slen ) break;

if ( ( 0x81 <= *pin && *pin <= 0x9F ) ||
( 0xE0 <= *pin && *pin <= 0xFC ) ) /* 全角文字の1バイト目 */
{
c[0] = *pin;
c[1] = *(pin+1);

/* 2 → 2 */
b2 = 0;
for( i = 0 ; i < HZ2SIZE ; i++ )
{
if ( c[0] == t2[i].zk[0] &&
c[1] == t2[i].zk[1] )
{
*pout++ = t2[i].hk[0];
*pout++ = t2[i].hk[1];
pin += 2;
b2 = 1;
break;
}
}
if ( b2 ) continue;

/* 2 → 1 */
b2 = 0;
for( i = 0 ; i < HZ1SIZE ; i++ )
{
if ( c[0] == t1[i].zk[0] &&
c[1] == t1[i].zk[1] )
{
if (c[0] == 0x81 && c[1] == 0x40) /* 全角スペース */
{
*pout++ = 0x20;
}
else
{
*pout++ = t1[i].hk[0];
}
pin += 2;
b2 = 1;
break;
}
}
if ( b2 ) continue;

*pout++ = *pin++;
*pout++ = *pin++;
}
else
{
*pout++ = *pin++;
}
}
*pout = 0x00;
}




/*
半角カタカナを全角カタカナにする
*/
void hankana2zenkana
(
unsigned char *sin, /* 入力文字列へのポインタ。ヌル終端文字列 */
unsigned char *sout /* 出力文字列へのポインタ。最大入力文字列の2倍のサイズが必要。ヌル終端文字列にして返す */
)
{
static unsigned char *pin,*pout,c[2],b2;
static int slen,i;

slen = strlen(sin);
pin = sin ;
pout = sout;

while(1)
{
if ( pin >= sin + slen ) break;

if ( ( 0x81 <= *pin && *pin <= 0x9F ) ||
( 0xE0 <= *pin && *pin <= 0xFC ) ) /* 全角文字の1バイト目 */
{
*pout++ = *pin++;
*pout++ = *pin++;
}
else if ( 0xA0 <= *pin && *pin <= 0xDF ) /* 半角カナ */
{
c[0] = *pin;
c[1] = *(pin+1);
b2 = 0;
for( i = 0 ; i < HZ2SIZE ; i++ )
{
if ( c[0] == t2[i].hk[0] &&
c[1] == t2[i].hk[1] )
{
*pout++ = t2[i].zk[0];
*pout++ = t2[i].zk[1];
pin += 2;
b2 = 1;
break;
}
}
if ( b2 ) continue;
for( i = 0 ; i < HZ1SIZE ; i++ )
{
if ( c[0] == t1[i].hk[0] )
{
*pout++ = t1[i].zk[0];
*pout++ = t1[i].zk[1];
pin ++;
break;
}
}
}
else /* 半角カナ以外の半角文字 */
{
*pout++ = *pin++;
}
}
*pout = 0x00;
}

/*
半角カタカナを全角ひらがなにする
*/
void hankana2zenhira
(
unsigned char *sin, /* 入力文字列へのポインタ。ヌル終端文字列 */
unsigned char *sout /* 出力文字列へのポインタ。最大入力文字列の2倍のサイズが必要。ヌル終端文字列にして返す */
)
{
static unsigned char *pin,*pout,c[2],b2;
static int slen,i;

slen = strlen(sin);
pin = sin ;
pout = sout;

while(1)
{
if ( pin >= sin + slen ) break;

if ( ( 0x81 <= *pin && *pin <= 0x9F ) ||
( 0xE0 <= *pin && *pin <= 0xFC ) ) /* 全角文字の1バイト目 */
{
*pout++ = *pin++;
*pout++ = *pin++;
}
else if ( 0xA0 <= *pin && *pin <= 0xDF ) /* 半角カナ */
{
c[0] = *pin;
c[1] = *(pin+1);
b2 = 0;
for( i = 0 ; i < HZ2SIZE ; i++ )
{
if ( c[0] == t2[i].hk[0] &&
c[1] == t2[i].hk[1] )
{
*pout++ = t2[i].zh[0];
*pout++ = t2[i].zh[1];
pin += 2;
b2 = 1;
break;
}
}
if ( b2 ) continue;
for( i = 0 ; i < HZ1SIZE ; i++ )
{
if ( c[0] == t1[i].hk[0] )
{
*pout++ = t1[i].zh[0];
*pout++ = t1[i].zh[1];
pin ++;
break;
}
}
}
else /* 半角カナ以外の半角文字 */
{
*pout++ = *pin++;
}
}
*pout = 0x00;
}


#include
int main(void)
{
/* テスト用 START */
char outbuf[50];
char outbuf2[50];
char outbuf3[50];

/* 全角カタカナを半角カタカナにする */
zenkana2hankana("アイウエオガギグゲゴ", outbuf);
printf("%s\n", outbuf);
/* 半角カタカナを全角ひらがなにする */
hankana2zenhira("アイウエオガギクゲゴ",outbuf2);
printf("%s\n", outbuf2);
/* 半角カタカナを全角カタカナにする */
hankana2zenkana("アイウエオガギクゲゴ",outbuf3);
printf("%s\n", outbuf3);
return 0;
/* テスト用 END */
/*
char inbuf[512],outbuf[1024];
char buf[1000];
FILE *fp1,*fp2;

fp1=fopen("c:\\zen2han.csv","r");
if (fp1==NULL)
{
printf("ファイルが開けませんでした。\n");
}
else
{
fp2=fopen("c:\\out.csv","w");
if (fp2==NULL)
{
printf("出力用ファイルが開けませんでした。\n");
}
else
{
while(fgets(inbuf,1000,fp1)!=NULL)
{
zenkana2hankana(inbuf, outbuf);
if(fputs(outbuf,fp2) < 0)
{
printf("ファイル書き込みに失敗しました。\n");
break;
}
}
fclose(fp2);
}
fclose(fp1);
}
*/
}
posted by rururu at 23:59| Comment(0) | TrackBack(0) | C言語