大人になっても苦手な食べ物、ありますか?

こんばんは(^o^)

C言語のファイル操作について聞きたいのですが、
半角スペースを消去するところまではわかったんですけど、
全角スペースも消去するプログラムがわかりません(>_<)
お手数ですが、ご指導のほうよろしくお願いしますm(_ _)m

問題
テキストファイルから空白を削除して、画面に表示するプログラムを
作成しなさい。

自分のプログラム
#include <stdio.h>
#include <stdlib.h>

#define SIZE 15

int main(void)
{
char c;
char finName[SIZE],foutName[SIZE];
FILE *fpin,*fpout;

printf("入力ファイル名>>>");
scanf("%s",finName);
if((fpin=fopen(finName,"r"))==NULL)
{
printf("ファイルが見つかりません。---%s\n",finName);
exit(EXIT_FAILURE);
}

printf("出力ファイル名>>>");
scanf("%s",foutName);
if((fpout=fopen(foutName,"w"))==NULL)
{
fclose(fpin);
printf("ファイルを作成できません。---%s\n",foutName);
exit(EXIT_FAILURE);
}

while(1)
{
c=fgetc(fpin);
if(feof(fpin))
{
break;
}
if(c!=' ')
{
fputc(c,fpout);
}
}

fclose(fpin);
fclose(fpout);

return EXIT_SUCCESS;
}

A 回答 (1件)

★ちょっと泥臭い(スマートでない)ですが・・・。



☆最大レコード長256未満のファイル対象
☆1レコード処理後出力

・(略)
unsigned char cBuf[256], cWork[256];
int k, iLen, nn, iZenK;
・(略)
while( NULL != fgets( cBuf, 255, fp1 ) ){

 iLen = strlen( cBuf );

 for( nn = 0, k = 0; k < ( iLen - 1 ); k++ ){

  if( 0x20 == cBuf[k] ) continue; // 半角空白

  if( 0 == isascii( cBuf[k] ) ){

   iZenK = 0;

   if( 0x81 == cBuf[k] ) iZenK++; // unsigend
   if( 0x40 == cBuf[k+1] ) iZenK++;

   if( 2 == iZenK ){ // 全角空白

    k++;

    continue; // cBuf[k] = 0x09;◆
   }
  }
  cWork[nn++] = cBuf[k]; // 格納
  cWork[nn ] = 0x00; // 文字列末端処理
 }
 printf( "%s\n", cWork );
}
注:インデント(◆)に全角空白を用いています。

この回答への補足

yama5140さん

とてもわかりやすいプログラムをありがとうございます(^o^)

また初歩的な質問で申し訳ないのですが…
最後にスペースをすべて消した文字列 cWork をファイルに書き込むには
どうしたらいいのでしょうか?
普通に表示まではうまく行ったのですが、
ファイルに書き込むと何も表示されません。
多分記述が悪いだけと思いますが…

printf("%s",cWork);
fprintf(fpout,"%s",cWork);

補足日時:2008/02/02 12:41
    • good
    • 0
この回答へのお礼

yama5140さん

すいませんこちらの手違いでしたm(_ _)m

おかげでうまく動かすことができました(^o^)
本当にありがとうございました!!!

お礼日時:2008/02/02 15:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報