rendered paste body#include <stdio.h>#include <string.h>int update_phonebook (char** bookNames, long* bookNumbers, int bookSize, char* newABOrder);int check_name (char* checking, char* abOrder);int build_new_list (char** bookNames, int bookSize);void swap (char** firstStr, char** nextStr);void max_sort (char** bookNames, int bookSize, char* abOrder);int find_max (char** bookNames, int last_id, char* abOrder);int str_cmp (char* compared, char* max_id_inBook, char* abOrder);int cmp_by_abc (char* abOrder, char char_in_compared, char char_max_id_inBook );int main (){ char* names[3] = {"moshe", "boris", "ahmad"}; long numbers[3] = {123, 456, 789}; char abOrder[]= "ambosrhed"; char checking []="boris"; int count=0; int i=0; count=update_phonebook (names, numbers, 3, abOrder); printf ("Amount of names in new PB is: %d", count); /*for (i=0; i<3; i++) { printf ("\nname %d is %s", i, names [i]); } printf ("maxid is %s", names[find_max (names, 2, abOrder)]); for (i=0; i<3; i++) { printf ("\nname %d is %s", i, names [i]); } max_sort (names, 3, abOrder);*/ for (i=0; i<3; i++) { printf ("\nname %d is %s", i, names [i]); } // for (i=0; i<3; i++) //{ // check_name (checking, abOrder); //} //for (i=0; i<3; i++) //{ //printf ("\nname %d is %s", i, names [i]); //} getchar (); return 0;}/*update phonebook*/int update_phonebook (char** bookNames, long* bookNumbers, int bookSize, char* abOrder){ int i=0, newBookSize=0; for (i=0; i<bookSize; i++) { if (check_name(bookNames[i], abOrder)==0) newBookSize++; } build_new_list (bookNames, bookSize); max_sort (bookNames, newBookSize, abOrder); return newBookSize; }/*check_name*/int check_name (char* checking, char* abOrder){ int i = 0,j = 0, k = 0; for (i=0;(checking[i]) != '\0'; i++) { for (j=0; (abOrder [j]) != '\0'; j++) { if (checking [i] == abOrder [j]) break; } if (abOrder[j]=='\0') { for (k=0; *(checking+k)!='\0'; k++) { printf ("\nchecking[%d] is %c", k,*(checking+k)); *(checking+k)='\0'; // is there a problem here? printf ("\nchecking[%d] is %c", k,*(checking+k)); } //printf ("Letters in name do not exist in NEW phonebook\n"); return -1; } } return 0;}/*build new list*/int build_new_list (char** bookNames, int bookSize){ int i=0, j=0, k=0 ; for (i=0; i<bookSize; i++) { if (bookNames [i][0]!=0) continue; else if (bookNames [i][0]==0) { swap(&bookNames[i], &bookNames[i+1]); } }}/*swap*/void swap (char** firstStr, char** nextStr)//ok?{ char* temp, i=0; temp=*firstStr; *firstStr=*nextStr; *nextStr=temp;}/*max_sort*/void max_sort (char** bookNames, int bookSize, char* abOrder){ int last_id, max_id; for ( last_id=(bookSize-1); last_id>=1; last_id--) { max_id=find_max (bookNames, last_id, abOrder); if (max_id!=last_id) swap (&bookNames[max_id], &bookNames[last_id]); } }/*find_max*/int find_max (char** bookNames, int last_id, char* abOrder){ int max_id=0, i=0; int compare=0; for (i=1; i<=last_id; i++)// { if (str_cmp(bookNames[i],bookNames[max_id], abOrder) > 0) { max_id=i; } } return max_id;}/*str_cmp*/int str_cmp (char* compared, char* max_id_inBook, char* abOrder){ int i=0, n=0,m=0; int match=0; n=strlen(compared); m=strlen(max_id_inBook); for (i=0; (i<n)||(i<m); i++) { match=cmp_by_abc (abOrder, compared[i], max_id_inBook[i]); if (match!=0) { break; } } if ( (match==0)&&(n!=m) ) //matching chars but one words is longer than the other { if (n>m) { match= 1; } else if (n<m) { match= -1; } } return match;}/*cmp_by_abc*/int cmp_by_abc (char* abOrder, char char_in_compared, char char_max_id_inBook ){ int i=0; if (char_in_compared == char_max_id_inBook) { return 0; } for (i=0; abOrder[i] != '\0'; i++) { if (char_in_compared == abOrder[i]) { return -1; } if (char_max_id_inBook == abOrder[i]) { return 1; } }}