OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

プログラムが~~~!!

  • すぐに回答を!
  • 質問No.173605
  • 閲覧数43
  • ありがとう数3
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 60% (108/179)

こんにちは。今、プログラム書いてるんですけど目的としては、
1、テキストファイルから文字列を読み込む。(大体数万文字)
2、それを100個ずつに区切る。
3、その百個ずつを二文字ずつ読んでいって、それがgcという文字列ならばその
百個の中での割合を示す。
4、さらに次の百個を・・・・
みたいなプログラムを書いてるんですけど一応下のような形までこぎつけましたが
もう、お手上げです。
どなたか、助けてください。

#include<iostream.h>
#include<stdio.h>
#include<string.h>
int main()
{
char pch[3];
int count=0;
FILE *fin;


fin=fopen('C:\ahowaki.dat','r');
fscanf(fin,'%s',&pch);

cout<<"入力\n";


while(pch){
cin.read(pch,2);

if((strcmp(pch,"gc"))==0)
count++;


if(count>=0 && count<=25)
cout<<"Under25%\n";
if(count>=26&& count<=50)
cout<<"Under50\n";
if(count>=51&& count<=75)
cout<<"Under75%\n";
if(count>=76&& count<=100)
cout<<"Under99%\n";

else
cout<<"Over100%\n";
}


return 0;


fclose(fin);
}
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル12

ベストアンサー率 45% (210/459)

こんにちは。itohhといいます。

前回の質問はこういうことだったのですね。

ちょっと、確認しますが、
1.C:\ahowaki.datファイルを読み込み、以下の処理を行いたい。
2.100バイトごとに特定の文字列の出現回数を採りたい。

これを前提にサンプルを書きます。
(インデントするために先頭に全角スペースを入れています)

int main()
{
  FILE *fin;
  char pch[101];
  int numread=0;
  int count=0;
  int i=0;

  if( (fin = fopen( "C:\\ahowaki.dat", "r+t" )) != NULL )
  {
    do
    {
      memset( pch, 0x00, sizeof(pch));
      /* 100文字を読み込む */
      numread = fread( pch, sizeof( char ), 100, fin );

      count = fncCheck(pch, "gc");

      printf( "%d:%d\n",i, count );
      i++;
    }
    while(numread==100);

    fclose( fin );
}

  return 0;
}

int fncCheck(char *pch, char *item)
{
  int count=0;
  int i=0;

  /* 文字列の最後まで検索する */
  for( i=0; i<stelen(pch); i++)
  {
    /*一致した場合は、カウントする*/
    if(memcomp(&pch[i], item, 2) == 0)
    {
      count++;
    }
  }

  return count;
}

テストしていないのでコンパイルエラー&バグがあるかもしれません。
お礼コメント
yabuchanchan

お礼率 60% (108/179)

こんにちは。そうです、実はこれが目的だったんです。本当に毎回的確なご回答ありがとうございます。
なんか、itohhさんにはお世話になりっぱなしで、なんとお礼をいったら良いのか分からないぐらいです。今回のプログラムを元に(といっても、90%これと同じですが・・・・♪)自分なりに書いてみることができました。エラーとかも自力で取り除くことができました。なんかちょっと自信つきました。本当にありがとうございます。
それにしてもプログラムって難しいですね。これほどのものをすぐかけるってすごいですね。僕も頑張ってもっと勉強したいと思います。
同じ目的でもプログラムっていろんな書き方があるんですね。あるごりずむってやつですか?僕もアルゴリズム本格的に勉強してみたくなりました!!!!!!!
本当にありがとうございました!!!!!
投稿日時 - 2001-11-25 01:13:53
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル10

ベストアンサー率 35% (56/160)

たとえば、こんな感じでしょうか? バグもあるかも。 これだと、100文字目が g で、101文字目が c の場合も カウントされると思います。これじゃまずいなら、 変数の初期化のところで、flg も初期化してください。 #include <stdio.h> #include <string.h> void showResult( int gccnt, int ...続きを読む
たとえば、こんな感じでしょうか?
バグもあるかも。
これだと、100文字目が g で、101文字目が c の場合も
カウントされると思います。これじゃまずいなら、
変数の初期化のところで、flg も初期化してください。

#include <stdio.h>
#include <string.h>

void showResult( int gccnt, int cnt );

int main()
{
 /* filename は C:\ahowaki.dat みたいですが... */
 FILE *fl = fopen( "filename", "r" );
 /* ファイルから読み込んだ1文字 */
 int c;
 /* ファイルから読み込んだ文字数(100までいくと初期化される) */
 int cnt = 0;
 /* 'gc'の数(cntが100までいくと初期化される) */
 int gccnt = 0;
 /* 1文字前が 'g' だったかどうか判定のフラグ */
 int flg = 0;

 if( fl == NULL ) {
  /* ここには、ファイルが開けなかったよ、というエラーを書く */
  printf( "ファイルがないみたい。\n" );
  exit( -1 );
 }

 while( ( c = fgetc( fl ) ) != EOF ) {
  if( flg ) {
   if( c == 'c' ) {
    gccnt++;
   } else {
    flg = 0;
   }
  }
  flg = ( c == 'g' );

  if( ++cnt == 100 ) {
   /* 結果表示 */
   showResult( gccnt, cnt );
   /* 変数の初期化 */
   cnt = 0;
   gccnt = 0;
  }
 }

 /* 文字数が100じゃ割り切れなかった場合ここで表示 */
 if( cnt != 0 ) {
  showResult( gccnt, cnt );
 }
 fclose( fl );

 return( 0 );
}

void showResult( int gccnt, int cnt )
{
 printf( "%d 文字の中に 'gc'を %d 個みつけました。\n", cnt, gccnt );
}
お礼コメント
yabuchanchan

お礼率 60% (108/179)

ありがとうございます。
なんとか、実行することができました。まだ、ファイル処理の書き方になれてなくて、うまくいかなかったんですが、たすかりました。
ほんとうにありがとうございました。
投稿日時 - 2001-11-25 01:04:07
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ