名前と売り上げをともにソートする
#include <stdio.h> #include <string.h> #include <stdlib.h> #define CHECKED 1 #define RETIRE 5 #define NAME_MAX 5 void sort(int no, char *result[]); typedef struct person09{ char name[NAME_MAX]; signed int profit; }person09_t; typedef struct person10{ char name[NAME_MAX]; signed int profit; }person10_t; void sort(int no, char *result[]){ int i; int j; char *temp; for(i = 0; i < no; i++){ for( j = i + 1; j < no; j++){ if(strcmp( (result[i]),(result[j] ) )>0){ temp = *(result + i); *(result + i) = *(result + j); *(result + j) = temp; } } } } int main(){ int i; int j; int r = 0; int cnt; int no; int flag[5] = {0}; char *result_array[8]; //char profit_array[8] = {0}; char *area; int profit_d[8] = {0}; //構造体配列 person09_t ary_09[6] = {{"アトウ",270},{"カスガ",325},{"タケモト",412},{"タナカ",333},{"ヤマシタ",277},{"ヨシオカ",192}}; person10_t ary_10[5] = {{"カスガ",357},{"スズキ",210},{"タケモト",445},{"ヤマシタ",233},{"ヨシダ",145}}; //元の数字を表示 for( i=0 ; i < 6; i++){ printf("%s ",ary_09[i].name); printf("%d\n",ary_09[i].profit); } printf("\n"); for( i=0 ; i < 5; i++){ printf("%s ",ary_10[i].name); printf("%d\n",ary_10[i].profit); } printf("\n"); //領域確保 area = (char *)malloc(sizeof(char)*5*8); result_array[0] = area; for(i = 0 ; i < 6 ;i++){ cnt = 0; for( j = 0; j < 5; j++){ //売上比較 if(strcmp( ary_09[i].name, ary_10[j].name) == 0 ){ printf("%s ",ary_09[i].name); profit_d[i] = (ary_10[j].profit) - (ary_09[i].profit); printf("%d\n",profit_d[i] ); flag[j] = CHECKED; result_array[r] = ary_09[i].name; r++; break; }else{ cnt++; } //退社判定 if( cnt == RETIRE ){ printf("%s 退社\n",ary_09[i].name); result_array[r] = ary_09[i].name; r++; break; } } } //入社判定 for( j = 0; j < 5; j++){ if( flag[j] != CHECKED ){ printf("%s 入社\n",ary_10[j].name); result_array[r] = ary_10[j].name; r++; } } //並び替え処理 printf("\n"); puts("---------------------------------------------"); no = 8; sort(no, result_array); for(i = 0; i < no; i++){ printf("結果[%d]=%s", i, result_array[i]); printf(" %d\n",profit_d[i] ); } free(area); return 0; }
昨年と今年の売り上げを比較し、昨年いない人は「入社」、今年いない人は「退社」というプログラムを書いています。
2つの構造体配列を比較し名前を50音順に並び替え、売り上げ、入社、退社 を名前と紐づけたいです。
何か良い方法があったら教えて頂きたいです。
あなたの回答
tips
プレビュー