掲示板利用宣言

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

 私は

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

掲示板2

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

No.24403

並び替え
投稿者---ぷりん(2005/11/28 19:37:03)


ファイルから、データを読み込み、人口の多い都道府県順に並び替えて、出力したいんですが、
北海道 56590
青森 1462
岩手 1402
宮城 2373
秋田 116


ちなみにこうゆうかんじで全国の都道府県の人口が書いてあるファイルなんですけど。ファイルを読み込むのは下に書いてあるように出来たんですけど、並び替えがどうやればいいのかわからないんで教えてください。
ちなみに、typedef structとか使うみたいなんです。困ってるんで誰かお願いします!


#include <stdio.h>
int main(){
char ken[12];
double num;
FILE *fp;
fp=fopen("pop.txt","r");
while(fscanf(fp,"%s\t%lf",ken, &num)!=EOF){
printf("%s\t%f \n", ken, num );
}
return 0;
}





この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:並び替え 24404 ぷりん 2005/11/28 19:39:05


No.24404

Re:並び替え
投稿者---ぷりん(2005/11/28 19:39:05)


いい忘れましたが、OSはwindouwで、lcc使ってます。



この投稿にコメントする

削除パスワード

No.24405

Re:並び替え
投稿者---とろり(2005/11/28 20:47:37)


>ファイルを読み込むのは下に書いてあるように出来たんですけど、並び替えがどうやればいいのかわからないんで教えてください。

並び替えることを「ソート」といいます。
「C言語 ソート アルゴリズム」でたくさんのサンプルソースを見つけることができるでしょう。


>ちなみに、typedef structとか使うみたいなんです。困ってるんで誰かお願いします!

構造体を使用するということですね。
構造体を使用したファイル読込み例を適当に作ったので以下に示します。参考くらいにはなるでしょう。


#include <stdio.h> 

typedef struct {
  char name[32];
  int  jinko;
} JinkoData;

int main(void)
{
  int i, num;
  FILE *fp;
  JinkoData jinkodata[12];  // ←12で大丈夫?

  fp=fopen("pop.txt", "r");
  if (fp == NULL) {
    printf("ファイルオープン異常\n");
    return(-1);
  }
  num = 0;
  while (fscanf(fp, "%s\t%d", jinkodata[num].name, &jinkodata[num].jinko) != EOF) {
    num++;
  }
  fclose(fp);
  
  /*-- ここにソート処理を追加する --*/
  
  for (i = 0; i < num; i++) {
    printf("%s:%d\n", jinkodata[i].name, jinkodata[i].jinko);
  }
  
  return(0);
}

[実行結果]
北海道:56590
青森:1462
岩手:1402
宮城:2373
秋田:116



この投稿にコメントする

削除パスワード

No.24406

Re:並び替え
投稿者---ぷりん(2005/11/28 23:56:27)


ソートっていうんですね?ありがとうございます。調べてみたんですけど、数字を並び替えるのは色々みつけたんですけど、県名を並び替えるのはどうしたらいいでしょう?for文を使うのはだいたい検討がつくんですが・・すいません、初心者なもので。お願いします。


この投稿にコメントする

削除パスワード

No.24407

Re:並び替え
投稿者---まきじ(2005/11/29 00:14:57)


/*ソート サンプル
gcc 3.4.2 (mingw-special)
paramater -std=iso9899:1990 -pedantic -O2 -Wall*/

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

#define Y 5
#define X 64

int main(void){

    char str[Y][X]={"Tokyo","Saitama","Chiba","Tochigi","Gunma"};
    char tmp[X];
    int i, j;
    
    for(i = Y - 1;i > 0; i--){
        for(j = 0; j < i; j++){
            if(strcmp(str[j],str[i]) > 0){
                strcpy(tmp,str[j]);
                strcpy(str[j],str[i]);
                strcpy(str[i],tmp);
            }
        }
    }
    
    for(i = 0; i < Y; i++) printf("%s\n",str[i]);
    
    return 0;
}



この投稿にコメントする

削除パスワード

No.24408

Re:並び替え
投稿者---wiz(2005/11/29 03:23:23)


>ソートっていうんですね?ありがとうございます。調べてみたんですけど、数字を並び替えるのは色々みつけたんですけど、県名を・・・

先に数字の並び替えをやってみてはいかが?



この投稿にコメントする

削除パスワード

No.24409

Re:並び替え
投稿者---επιστημη(2005/11/29 06:44:12)


> 数字を並び替えるのは色々みつけたんですけど、県名を並び替えるのはどうしたらいいでしょう?

では数値を基準に並び替えてみましょう。
次にそのコードを修正し、文字列を基準に並び替えましょう。
両者の違いは'比較の方法'と'代入/交換の方法'だけです。
並び替えのアルゴリズムそのものに変わるところはありません。



この投稿にコメントする

削除パスワード

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