Thread: Sorting strings

  1. #1
    Registered User
    Join Date
    Oct 2010
    Posts
    63

    Question Sorting strings

    Any ideas for how to sort strings, check the code I commented out here it was my attempt at comparing strings. in printOrder function.

    Code:
    /*
    
    My name is Jack Trocinski
    
    */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    void printArray(struct xrec * a, int n);
    void printArrayG(struct xrec * a, int n);
    void printAs(struct xrec * a, int n);
    void printFs(struct xrec * a, int n);
    void computeGrade(struct xrec * a, int n);
    // void printOrder(struct xrec * a, int n);
    //  Wasn't sure how to make it sort
    int search(struct xrec * a, int n,char * tssn);
    
    struct xrec 
    {
       char name[15];
       char ssn[12];
       char gender;
       double a, q, m, h, final;
       char grade;
    };
    
    int displayMenu(void);
    
    int main()
    {   char tssn[12];
        struct xrec temp;
    	struct xrec x[20];
    	int size=0, com, d, i;
    	FILE * infile;
    	 	
    	if((infile= fopen("c:\\data.txt","r")) == NULL)
    	{
    	   printf("File Not Found \n");
    	   exit (1);
    	}
    	
    	while(fscanf(infile,"%15s %11s %c %lf %lf %lf %lf %lf",
    	    temp.name,temp.ssn,&temp.gender,&temp.a,&temp.q,&temp.m,&temp.h,&temp.final)!=EOF)
    		{
    			temp.name[14]='\0'; temp.ssn[11]='\0';
    			x[size++]=temp;
    		}
    		
    	fclose(infile);
    	computeGrade(x,size);
    	 
    	do {
    		com = displayMenu();
    		switch (com)
    		{
    		    case 1 : printArray(x,size); break;
    			
    			case 2 : printArrayG(x,size); break;
    			
    			case 3 : printAs(x,size); break;
    			
    			case 4 : printFs(x,size); break;
    			
    			//case 5 : printOrder(x,size); break;
    			
    			case 6 : printf("Name:");fflush(stdin); gets(temp.name);
                         printf("SSN:");fflush(stdin); gets(temp.ssn);
    					 printf("Gender:");fflush(stdin); scanf("%c",&temp.gender);
    					 printf("Assignment,Quiz,Midterm,Participation,Final:"); scanf("%lf %lf %lf %lf %lf",
    					 &temp.a,&temp.q,&temp.m,&temp.h,&temp.final);
    					 x[size++] = temp; computeGrade(x,size); break;
    					 
    			case 7 : printf("SSN:");fflush(stdin); gets(tssn);
    			         d = search(x,size,tssn);
    					 if (d < 0)
    					 printf("record is not found\n");
    					 else
    					 x[d]=x[--size];
    				     break;
    			
    			case 8 : infile=fopen("data.txt","w");
    			         for(i=0; i < size;i++)
    					 fprintf(infile,"%10s %11s %c %lf %lf %lf %lf %lf\n",
    					 x[i].name,x[i].ssn,x[i].gender,x[i].a,x[i].q,x[i].m,x[i].h,x[i].final);
    					 printf("File is updated.\n");fclose(infile); break;
    		
    			default: printf("Bad Input....\n");
    						
    		}
    	} while (com != 8);
    		
    	return 0;
    }
    
    int search(struct xrec * a, int n,char * tssn)
    {
    	int i;
    	for(i= 0 ; i < n ; i++)
    	    if(strcmp(a[i].ssn,tssn) == 0)
    		return i;
    	return -1;
    }
    
    void computeGrade(struct xrec * a, int n)
    {
    	int i; double total;
    	
    	for(i = 0; i < n ; i++) {
    	
    		total= (a[i].a * .40) + (a[i].q * .15) + (a[i].m * 0.15) + (a[i].h * 0.10) + (a[i].final*0.20);
    		  
    		switch (((int)total)/10) {
    			case 10 : case 9 : a[i].grade='A'; break;
    			case 8 : a[i].grade='B'; break;
    			case 7 : a[i].grade='C'; break;
    			case 6 : a[i].grade='D'; break;
    			default : a[i].grade='F';
    		}
    	}
    }
    	
    int displayMenu(void)
    {
    	int c;
    	
    	printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
    	printf("@                                              @\n");
    	printf("@ 1. Print list of students                    @\n");
    	printf("@ 2. Print list of students with letter grade  @\n");
    	printf("@ 3. Print list of students with an A grade    @\n");
    	printf("@ 4. Print list of students with an F grade    @\n");
    	printf("@ 5. Print list of students sorted by name     @\n");
    	printf("@ 6. Add student to the class list             @\n");
    	printf("@ 7. Delete student from class list            @\n");
    	printf("@ 8. Exit                                      @\n");
    	printf("@                                              @\n");
    	printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
    	
    	printf("Enter Your Choice 1-8? ");
    	scanf("%d",&c);
    	return c;
    }
    	
    void printArray(struct xrec * a, int n)
    {
    	int i;
    	for(i = 0; i < n; i++)
    	printf("Name: %-15s SSN:%-11s Gender:%c %4.1f %4.1f %4.1f %4.1f %4.1f\n",
    	    a[i].name,a[i].ssn,a[i].gender,a[i].a,a[i].q,a[i].m,a[i].h,a[i].final);
    		
    }
    /* Wasn't sure how to make it sort
    
    void printOrder(struct xrec * a, int n)
    {
    	int i, l;
    	struct temp ;
    	
    	for ( i = 0; i < n; ++i) {
    					for ( l = 0; l < n ; ++l ) {
    						if ( strcmp(a[l].name,(a[l+1].name)) == 1) {
    							temp = a[l];
    							a[l] = a[l+1];
    							a[l+1] = temp;
    						}
    					}
    				}
    		
    	
    	for(i = 0; i < n; i++) {
    	printf("%-15s\n",a[i].name);
    	}
    }
    
    */
    
    void printArrayG(struct xrec * a, int n)
    {
    	int i;
    	for(i = 0; i < n; i++)
    	printf("Name: %-15s SSN:%-11s Gender:%c %4.1f %4.1f %4.1f %4.1f %4.1f Grade:%c\n",
    			a[i].name,a[i].ssn,a[i].gender,a[i].a,a[i].q,a[i].m,a[i].h,a[i].final,a[i].grade);
    }
    
    void printAs(struct xrec * a, int n)
    {
    	int i;
    	for(i = 0; i < n; i++) {
    		if (a[i].grade == 'A') {
    			printf("%-15s has an A in the class.\n",a[i].name);
    		}
    	}
    }
    
    void printFs(struct xrec * a, int n)
    {
    	int i;
    	for(i = 0; i < n; i++) {
    		if (a[i].grade == 'F') {
    			printf("%-15s has a F in the class.\n",a[i].name);
    		}
    	}
    }

  2. #2
    and the Hat of Guessing tabstop's Avatar
    Join Date
    Nov 2007
    Posts
    14,336
    You should look more closely at strcmp -- no reason for you to assume that it will ever return 1.

    Also "struct temp" is sorely missing a typename.

  3. #3
    Registered User
    Join Date
    Oct 2010
    Posts
    63
    OK, will check that out. Thanks.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Sorting Array of Strings
    By nair in forum C Programming
    Replies: 6
    Last Post: 10-09-2010, 11:10 AM
  2. Problem sorting an array of strings
    By Leojeen in forum C Programming
    Replies: 7
    Last Post: 05-07-2008, 09:02 PM
  3. strings, sorting
    By kocika73 in forum C Programming
    Replies: 4
    Last Post: 02-18-2006, 04:29 PM
  4. Replies: 2
    Last Post: 02-23-2004, 06:34 AM
  5. Sorting strings to speed up search?
    By Mox in forum C++ Programming
    Replies: 5
    Last Post: 09-10-2001, 12:17 PM