01.Blogs :
straylamb  
ゲーム関連とプログラム言語。 バグ。
やることは多し
Tuesday, July 25, 2006 1:41 AM

 コンテナクラスってなにですか。

STLがぜんぜんわかなーい。

vector, list, algorithm, map, string

なんかーいい本ないかなー。

どうやって勉強すればいいんだー。

英語はしんどいです。

2 Comments | Post a Comment |

posted  by  straylamb  with 

ひさしぶりのC言語
Tuesday, July 11, 2006 8:53 PM

 ネットワークプログラム、わかんないや。

テキストファイルを転送するだけすらできない。

まず、IPアドレス入力して、ファイル名渡して、

あー、たいへんだー。

 

0 Comments | Post a Comment |

posted  by  straylamb  with 

昨日の続き
Tuesday, May 30, 2006 1:11 AM

 unsigned char string[3];

unsinged char型に、strcpy と strcmp でコピーと比較したいんだけど

なんでうまくいかないんだ。

 _mbscmp と _mbscpy でもうまくできないのはなぜ。

 unsigned char *buf;

_mbscmp( buf, string );

 

0 Comments | Post a Comment |

posted  by  straylamb  with 

未熟ですみません
Monday, May 29, 2006 1:30 AM

 せっかくここまできたので、

文章にでてきた全角文字の頻度の一番多いものがわかるプログラムに挑戦。

(あれ、そういえば、fgetcをunsigned char型で受け取ってるけどそれでいいのか)

#include <stdio.h>
#include <conio.h>
#include <assert.h>
#include <mbstring.h>


int main(void)
{

 unsigned char buffer;

 char string[3];


 FILE *fp = fopen( "bunsyo.txt", "r");

  assert ( fp != NULL );

 buffer = fgetc(fp);

 while( buffer != EOF ){
 
  if( 1 == _mbsbtype( &buffer, 0) ){  

   fseek( fp, -1, SEEK_CUR );
  
   fread( string, 2, 1, fp );

   string[2] = '\0'; 
//   *(string+2) = '\0';

   printf( "%s,\n", string );

  }
 
  buffer = fgetc(fp); 

 }

 fclose( fp);
 
 _getch();

 return 0;

}

・追記

↓はなんかマヌケな気がしますがなんとか動いてます、キャスト大丈夫なはず。

#include <conio.h>
#include <assert.h>
#include <mbstring.h>


int main(void)
{

 char string[3];

 
 FILE *fp = fopen( "hiragana.txt", "r");

 assert ( fp != NULL );


 while( fread( string, 1, 1, fp ) ){

 
  if( 1 == _mbsbtype( (unsigned char*)string, 0 ) ){  

   fseek( fp, -1, SEEK_CUR );
  
   fread( string, 2, 1, fp );

//   string[2] = '\0'; 
   *(string+2) = '\0';

   printf( "%s,\n", string );


  }
 

 }

 fclose( fp);
 
 _getch();

 return 0;

}

最初から、unsigned char string[3]にすればいいんだ。

4 Comments | Post a Comment |

posted  by  straylamb  with 

まだまだ
Monday, May 29, 2006 12:49 AM

 なんとか半角文字を飛ばすことができた。

でもなんか余計なものが「フ」ですか、freadがあやういですか、終端文字ですか。

#include <stdio.h>
#include <conio.h>
#include <assert.h>
#include <mbstring.h>


int main(void)
{

 unsigned char buffer;

 char string;


 FILE *fp = fopen( "hiragana.txt", "r");

 assert ( fp != NULL );

 buffer = fgetc(fp);

 while( buffer != EOF ){
 
  if( 1 == _mbsbtype( &buffer, 0) ){  

   fseek( fp, -1, SEEK_CUR );
  
   fread( &string, sizeof(char)*2, 1, fp );

   printf( "%s, ", &string );

  }
 
  buffer = fgetc(fp); 

 }

 fclose( fp);
 
 _getch();

 return 0;

}

 

・追記

なんこも、BLOGはやめよう、自分。

文字取り出すことに成功、でもなんで、string[2]でいいんだろう? string[3]ではなく。

#include <stdio.h>
#include <conio.h>
#include <assert.h>
#include <mbstring.h>


int main(void)
{

 unsigned char buffer;

 char string[2];

 
 FILE *fp = fopen( "hiragana.txt", "r");

 assert ( fp != NULL );

 buffer = fgetc(fp);

 while( buffer != EOF ){
 
  if( 1 == _mbsbtype( &buffer, 0) ){  

   fseek( fp, -1, SEEK_CUR );
  
   fread( string, sizeof(char)*2, 1, fp );

   string[2] = '\0';

   printf( "%s,\n ", string );

  }
 
  buffer = fgetc(fp); 

 }

 fclose( fp);
 
 _getch();

 return 0;

}

6 Comments | Post a Comment |

posted  by  straylamb  with 

こんどはエラーか
Sunday, May 28, 2006 11:48 PM

#include <stdio.h>
#include <conio.h>
#include <assert.h>
#include <mbstring.h>


int main(void)
{


 int buffer;


FILE *fp = fopen( "hiragana.txt", "r");

 assert ( fp != NULL ); 

 
 buffer = fgetc(fp);

 while( buffer != EOF ){
 
  if( 1 == _mbsbtype( (unsigned char *)buffer, 0) ){   

   fseek( fp, -1, SEEK_CUR );

   fread( (void *)buffer, sizeof(char)*2, 1, fp );


   printf( "%s,", buffer );
   

  }
  


  buffer = fgetc(fp);  

 }


 fclose( fp);
 
 _getch();

 return 0;

}

6 Comments | Post a Comment |

posted  by  straylamb  with 

やっぱりダメか
Sunday, May 28, 2006 11:21 PM

  うーん、さっぱりわかりませんです。
何も表示されないですが。


#include <stdio.h>
#include <conio.h>
#include <assert.h>
#include <mbstring.h>


int main(void)
{

 unsigned char buffer;

 char *string;

 
 FILE *fp = fopen( "hiragana.txt", "r");

 assert ( fp != NULL ); 

 buffer = fgetc(fp);

 while( buffer != EOF ){
 
  if( 1 == ( (const unsigned char &)buffer, 0) ){   

   fseek( fp, -1, SEEK_CUR );
   
   fread( string, sizeof(char)*2, 1, fp );

   printf( "%s, ", string );

  }
  
  buffer = fgetc(fp);  

 }

 fclose( fp);
  
 _getch();

 return 0;

}

1 Comments | Post a Comment |

posted  by  straylamb  with 

しまった! 1文字づつ読み込んだことないや
Sunday, May 28, 2006 10:29 PM

 fgetcでファイルから呼んで、

if( 1 == _mbsbtype( buffer, 0) ) で判断して、キャストが必要かな。

次の1バイト読み込んで、つなげて、プリントする。

そうすると、みごとにできる(?)

 そもそも、buffer = fgetc(fp) とすると、bufferはint型?

 

 

1 Comments | Post a Comment |

posted  by  straylamb  with 

うーわかんない
Saturday, May 27, 2006 9:04 PM

 C、C++で、全角文字(ひらがなとか)を判断する関数ないのかなー。

文章から、全角文字とりだすのはどうやってやればいいんだろ。

 

sizeof(stirng)で配列全体の大きさがわかるんだ。
ポインタの配列は大体わかったかな。

#include <stdio.h>

int main(void)
{

 char *string[] = { "ONE", "TWO", "THREE", "FOUR", "FIVE" };

 int num = 0;

 for( num = 0; num < sizeof(string)/sizeof(stirng[0]); num++ ){

  printf( "%d:%s", num, string[num] );

 }

 return 0;

}

2 Comments | Post a Comment |

posted  by  straylamb  with 

こんな時間にかいてるおれは負け犬だ
Sunday, April 16, 2006 4:18 AM

 うーん、DirectX、進みません。

どーにかなりませんかな、まだ2次元ですよ。

ポリゴンだけですよ。

 1からやるとタイヘンですな。

 

あと、かくこと…、そうそうねネクタイの結び方わかんなかったんで

HUBに載せとくってことかな。

でも、今投稿しても、反映するまでに時間かかるんだよな。

といっても、リンク先をメモするだけ。

0 Comments | Post a Comment |

posted  by  straylamb  with 

たしただけ
Saturday, April 08, 2006 6:38 AM

 いろいろな項目足してみました。

asiato.txt

512 4/7 23:00 stray lame
511 4/7 22:23 スポケ タロウ
510 4/7 22:12 student

                  ・
                  ・
                  ・

2 1/2 3:24 BLINXS
1 1/1 2:43 MASTER


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

#define K 513


//それぞれのキーワードと数を保持
struct record {

 char keyword[30];

 int count;

};

struct footprint {

 int number;

 char day[30];

 char time[30];

 char name[30];

 int count;

};

//比較関数
int compare( const void *a, const void *b )
{

 return strcmp( *( const char** )a, *( const char** )b );

}


//文字列の最後の\nを\0に置き換える
char* erase_cr( char* str )
{

 char* pos;

 while ( ( pos = strchr( str, '\n' ) ) != NULL )
 
  *pos = '\0';

 return str;

}

//構造体のアドレスをとってきて、文字列の配列とkeyを比べて同じだったらそのアドレスを返す。
struct footprint* find_keyword( struct footprint* track, int size, const char* key )
{

 int i;

 for ( i = 0; i < size; ++i ) {

  if ( strcmp(track[i].name, key) == 0 ) {

   return &track[i];

  }
 }
 
 return NULL;

}

 

int main(void)
{

 struct record hist[K];

 struct footprint track[K];

 int size; //キーワードの種類数

 int kind = 0;

 FILE* fp;

 char *data[K] ={ 0 };

 char buffer[30];

 int num = 0;

 char d[30];

 char t[30];

 char na[30];

 int i;


 fp = fopen( "Asiato.txt", "r" );

 assert ( fp != NULL );

 fscanf( fp, "%d %s %s ", &num, d, t );

 //構造体に文字列を1つ1つ登録
// for ( size = 0; fgets( buffer, 20, fp ) != NULL; size++ ) {
// for( size = 0; fscanf( fp, "%d %s %s %s", &num, d, t, na ) != EOF; size++ ) {   
 for ( size = 0; fgets( na, 30, fp ) != NULL; size++ ) {

  //←
  strcpy( track[size].name, erase_cr(na) );

  track[size].count = 0;

  fscanf( fp, "%d %s %s ", &num, d, t );

 }

 fclose(fp);


////////でたらめ文字列登録/////////


 for( i = 0; i < K - 1; i++ )
  data[i] = track[i].name;

///////////////////////////////////


 qsort( data, K - 1, sizeof(*data), compare ); 


//////////////そろえおわった/////////////

 for ( i = 0; i < K - 1; i++ ) {

  if ( strcmp( data[kind], data[i] ) ) {

   data[++kind] = data[i];
   
  }

 }


 fp = fopen( "Kind.txt", "w" );

 assert ( fp != NULL );
 

 for( i = 0; i < kind + 1; i++ ) {

  fprintf( fp, "%s\n", data[i] );

 }

 fclose(fp);


/////////////////種類もだした////////////////


 fp = fopen( "Kind.txt", "r");

 assert ( fp != NULL );


 //構造体に文字列を1つ1つ登録
 for ( size = 0; fgets(buffer, 30, fp) != NULL; ++size ) {
// for( size = 0; fscanf( fp, "%d %s %s %s", number, day, time, name ) != EOF; size++ ) { 
  //←
  strcpy( track[size].name, erase_cr(buffer) );

  track[size].count = 0;

 }

 fclose(fp);
 
////////////////////種類取得/////////////////


 fp = fopen( "Asiato.txt", "r" );

 assert ( fp != NULL );

 fscanf( fp, "%d %s %s ", &num, d, t );

// while ( fgets(buffer, 20, fp ) != NULL ) {
// while ( fscanf( fp, "%d %s %s %s", &num, d, t, na ) != EOF ) {   
 while ( fgets( na, 30, fp ) != NULL ) {

  struct footprint* found = find_keyword( track, size, erase_cr(na) );

  //キーワードと同じ文字列があればカウントアップ
  if ( found != 0 ) {
   
   ++found->count;

  }

  fscanf( fp, "%d %s %s ", &num, d, t );

 }
 
 fclose(fp);


 fp = fopen( "Count.txt", "w" );

 assert ( fp != NULL );


 for ( i = 0; i < size; ++i ) {

  fprintf( fp, "%-20s %2d\n", track[i].name, track[i].count );

 }
 
 fclose(fp);

 return 0;

}

0 Comments | Post a Comment |

posted  by  straylamb  with 

まとめてみました
Saturday, April 08, 2006 2:34 AM

 ただ、まえまえからやってるやつをまとめただけ。

いがいにどうにかなるものだ。

 おかしいところ直さねば。

Original.txt

C++
OpenGL
Java
C++
Perl
C++
Assembler
DirectX
C++
DirectX
C
HTML
C
Java
Visual C++
CGI
C

 ↓

Kind.txt

Assembler
C
C++
CGI
DirectX
HTML
Java
OpenGL
Perl
Visual C++

Count.txt

Assembler        1
C                      3
C++                  4
CGI                  1
DirectX            2
HTML              1
Java                  2
OpenGL            1
Perl                   1
Visual C++       1


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

#define K 18


//それぞれのキーワードと数を保持
struct record {

 char keyword[20];

 int count;

};


//比較関数
int compare( const void *a, const void *b )
{

 return strcmp( *( const char** )a, *( const char** )b );

}


//文字列の最後の\nを\0に置き換える
char* erase_cr( char* str )
{

 char* pos;

 while ( ( pos = strchr( str, '\n' ) ) != NULL )
 
  *pos = '\0';

 return str;

}

//構造体のアドレスをとってきて、文字列の配列とkeyを比べて同じだったらそのアドレスを返す。
struct record* find_keyword( struct record* rec, int size, const char* key )
{

 int i;

 for ( i = 0; i < size; ++i ) {

  if ( strcmp(rec[i].keyword, key) == 0 ) {

   return &rec[i];

  }
 }
 
 return NULL;

}

 

int main(void)
{

 struct record hist[K];

 

 int size; //キーワードの種類数

 int kind = 0;

 FILE* fp;

 char *data[K] ={ 0 };

 char buffer[20];

 int i;

 fp = fopen( "Original.txt", "r" );

 assert ( fp != NULL );


 //構造体に文字列を1つ1つ登録
 for ( size = 0; fgets( buffer, 20, fp ) != NULL; size++ ) {
  
  //←
  strcpy( hist[size].keyword, erase_cr(buffer) );

  hist[size].count = 0;

 }

 fclose(fp);


////////でたらめ文字列登録/////////


 for( i = 0; i < K - 1; i++ )
  data[i] = hist[i].keyword;

///////////////////////////////////

 qsort( data, K - 1, sizeof(*data), compare ); 

/*
 for ( i = 0; i < size - 2; ++i ) {

  printf( "%-15s %2d\n", data[i], hist[i].count );

 }
*/

//////////////そろえおわった/////////////

 for ( i = 0; i < K - 1; i++ ) {

  if ( strcmp( data[kind], data[i] ) ) {

   data[++kind] = data[i];
   
//   for( j = 0; j < N; j++ ) printf( "%s\n", data[j] );

//   printf("\n");
  }

 }

 fp = fopen( "Kind.txt", "w" );

 assert ( fp != NULL );
 

 for( i = 0; i < kind; i++ ) {

  printf( "%s\n", data[i] );

  fprintf( fp, "%s\n", data[i] );

 }

 fclose(fp);

/////////////////種類もだした////////////////


 fp = fopen( "Kind.txt", "r");

 assert ( fp != NULL );


 //構造体に文字列を1つ1つ登録
 for ( size = 0; fgets(buffer, 20, fp) != NULL; ++size ) {
  
  //←
  strcpy(hist[size].keyword, erase_cr(buffer));

  hist[size].count = 0;

 }

 fclose(fp);
 
////////////////////種類取得/////////////////

 

 fp = fopen( "program.txt", "r" );

 assert ( fp != NULL );


 while ( fgets(buffer, 20, fp ) != NULL ) {

  struct record* found = find_keyword( hist, size, erase_cr(buffer) );

  //キーワードと同じ文字列があればカウントアップ
  if ( found != 0 ) {
   
   ++found->count;

  }

 }
 
 fclose(fp);


 fp = fopen( "Count.txt", "w" );

 assert ( fp != NULL );


 for ( i = 0; i < size; ++i ) {

  fprintf( fp, "%-15s %2d\n", hist[i].keyword, hist[i].count );

 }
 
 fclose(fp);

 return 0;

}

 ほとんど、俺作ってないじゃん。

ポインタの理解がまだまだだし。

3 Comments | Post a Comment |

posted  by  straylamb  with 

10万円
Tuesday, April 04, 2006 9:13 PM

 Ultra Mobile PC ってなんすか。

Origami(おりがみ)っていうから、本当に折れると思ってたのは

おれだけ。

http://www.sourcenext.com/hard/smartcaddie.html?i=CAN000002388

 

 こんなことやってる場合じゃないか。

0 Comments | Post a Comment |

posted  by  straylamb  with 

ファイルから読み込んでまとめる
Tuesday, April 04, 2006 4:15 PM

 Cで、下のようにしたいんですが、

いまだに、うまくいってませんわ。

Assembler
C
C
C
C++
C++
C++
C++
CGI
DirectX
DirectX
HTML
Java
Java
OpenGL
Perl
Visual C++

 ↓

Assembler
C
C++
CGI
DirectX
HTML
Java
OpenGL
Perl
Visual C++

10 Comments | Post a Comment |

posted  by  straylamb  with 

読み込んで読み込んで…
Sunday, April 02, 2006 11:08 AM

 テキストファイルを2つ読み込んで1個1個の数を数える。

ここまでくるとさらにマヌケ。

 original.txt

Assembler
C
C
C
C++
C++
C++
C++
CGI
DirectX
DirectX
HTML
Java
Java
OpenGL
Perl
Visual C++

 kind.txt

Assembler
C
C++
CGI
DirectX
HTML
Java
OpenGL
Perl
Visual C++


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

#define O 18
#define K 11

int main(void)
{

 int o_len, k_len;
 
 int i = 0, j = 0;

 int num_data[K];

 char o_buf[20], k_buf[20];

 char *o_data[O], *k_data[20];
 
 FILE *fp, *gp, *hp;


 fp = fopen( "original.txt", "r" );

 if( fp == NULL ) return 1;

 gp = fopen( "kind.txt", "r" );

 if( gp == NULL ) return 1;

 hp = fopen( "count.txt", "w" );

 if( hp == NULL ) return 1;


 for( i = 0; i < K - 1; i++ ) num_data[i] = 0;

 i = 0;


 while(1) {

  fgets( o_buf, 20, fp );

  o_len = strlen( o_buf );

  if( o_buf[o_len - 1] == '\n' ) o_buf[--o_len] = '\0';

  o_data[i] = ( char * )malloc(o_len + 1);

  strcpy( o_data[i], o_buf );

  if( feof(fp) ) break;

//  printf( "%s\n", buf );

  i++;

 }


 i = 0;

 while(1) {

  fgets( k_buf, 20, gp );

  k_len = strlen( k_buf );

  if( k_buf[k_len - 1] == '\n' ) k_buf[--k_len] = '\0';

  k_data[i] = ( char * )malloc(k_len + 1);

  strcpy( k_data[i], k_buf );

  if( feof(gp) ) break;

//  printf( "%s\n", buf );

  i++;

 }


 for( i = 0; i < O - 1; i++ ){

  for ( j = 0; j < K -1; j++ ) {
 
   if ( strcmp( o_data[i], k_data[j] ) == 0 ) {
   
    num_data[j]++;

   }

  }

  
 }

 for( i = 0; i < K - 1; i++ ){

//  printf( "%s:%d\n", k_data[i], num_data[i] );
  fprintf( hp, "%s:%d\n", k_data[i], num_data[i] );
  
 }


 for( i = 0; i < O - 1; i++ ) {

//  printf( "%s\n", data[i] );
//  fprintf( fp, "%s\n", data[i] );
  
  free( o_data[i] );
 }

 for( i = 0; i < K - 1; i++ ) {

//  printf( "%s\n", data[i] );
//  fprintf( gp, "%s\n", data[i] );
  
  free( k_data[i] );
 }


 fclose(fp);

 fclose(gp);

 fclose(hp);

 return 0;

}

4 Comments | Post a Comment |

posted  by  straylamb  with 


 
03.UPDATE CALENDAR :
<December 2008>
SunMonTueWedThuFriSat
30123456
7891011