私はプロジェクトをしようとしています...プロジェクトは連絡先を持つCSVファイルから読み込む必要があります。 連絡先には、連絡先タイプの構造体の配列に読み込むいくつかのフィールドがあります。 例:異なるメンバーによる構造ソート
void string_InsertionSort(contact *array, int size, char *sortField){
waitForKey();
int i,j;
contact key;
if (strcmp(sortField, "First name") == 0){
for (i = 1; i < size; i++){
key=array[i];
j = i-1;
while ((j >= 0) && strcmp(array[j].contactFirstName, array[j].contactFirstName) > 0){
array[j + 1] = array[j];
j--;
}
array[j + 1] = key;
}
}else if (strcmp(sortField, "Last name") == 0){
for (i = 1; i < size; i++){
key=array[i];
j= i-1;
while ((j >= 0) && strcmp(array[j].contactLastName, array[j].contactLastName) > 0){
array[j + 1] = array[j];
j--;
}
array[j + 1] = key;
}
}else{
printf(" debuggggg");
}
}
私はいくつかのdiferent機能で連絡先を並べ替えるために、いくつかの並べ替えalgoritmsを実装しています:array.contactFirstName、配列contactLastNameなど ここでは、コードの一部です。
問題は、string_InsertionSort関数で、配列の配列、配列のサイズ、および並べ替えるフィールドを渡すことです。関数の中で、ソートフィールドを私が持っているフィールドと比較し、正しい場合はソートを行います。
問題は15個のフィールドがあるため、すべてのコードを別のフィールドに繰り返す必要があることです。別の方法がありますか?もしそうなら、誰でも、私に例を挙げてもらえますか? (外部から構造体メンバにアクセスする種類)
aswerはおそらく:関数のポインタを使って、compare関数を引数として汎用ソート関数に渡します。 – wildplasser