User Name Password Register
DaniWeb IT Discussion Community
All
What is DaniWeb IT Discussion Community?
You're currently browsing the C section within the Software Development category of DaniWeb, a massive community of 402,004 software developers, web developers, Internet marketers, and tech gurus who are all enthusiastic about making contacts, networking, and learning from each other. In fact, there are 2,390 IT professionals currently interacting right now! Registration is free, only takes a minute and lets you enjoy all of the interactive features of the site.
Views: 19243 | Replies: 14
Reply
Join Date: May 2004
Posts: 19
Reputation: matika is an unknown quantity at this point 
Rep Power: 5
Solved Threads: 0
matika matika is offline Offline
Newbie Poster

Solution sorting an array of string

  #1  
Jun 7th, 2004
is there any function that helps to sort an array of strings alphabeticly
i need to sort an array alphabeticly which contains names of students
thx 4 yr help
matika
AddThis Social Bookmark Button
Reply With Quote  
Join Date: May 2004
Location: Egypt - Cairo
Posts: 129
Reputation: meabed is on a distinguished road 
Rep Power: 5
Solved Threads: 2
Colleague
meabed's Avatar
meabed meabed is offline Offline
Junior Poster

Re: sorting an array of string

  #2  
Jun 7th, 2004
void qsort ( void * base, size_t num, size_t width, int (*fncompare)(const void *, const void *) );
Sort using quicksort algorith.
This function uses an implementation of the quicksort algorithm to sort the num elements of an array pointed by base, each element has the specified width in bytes.
The method used to compare each pair of elements is provided by the caller to this function with fncompare parameter, that is a function called one or more times during the sort process.
Parameters.
-------------
base
Pointer to the first element of the array where the sorting process has to be performed.
num
Number of elements in the array pointed by base.
width
Width of each element in the array.
fncompare
Function that compares two elements. This should be provided by the caller to this function and must follow or be casted to a declaration like:

int fncompare (const void * elem1, const void * elem2 );
The function should receive two parameters (elem1 and elem2) that are pointers to elements, and should return an int value with the result of comparing them:

return value description
<0 *elem1 goes before *elem2
0 *elem1 == *elem2
>0 *elem1 goes after *elem2

Return Value.
(none)

Portability.
Defined in ANSI-C.

Example.
/* qsort example */
#include <stdio.h>
#include <stdlib.h>

int values[] = { 40, 10, 100, 90, 20, 25 };

int compare (const void * a, const void * b)
{
  return ( *(int*)a - *(int*)b );
}

int main ()
{
  int * pItem;
  int n;
  qsort (values, 6, sizeof(int), compare);
  for (n=0; n<6; n++)
  {
    printf ("%d ",values[n]);
  }
  return 0;
}

Output:
10 20 25 40 90 100 
Real Eyes Realize Real Lies
Reply With Quote  
Join Date: May 2004
Posts: 19
Reputation: matika is an unknown quantity at this point 
Rep Power: 5
Solved Threads: 0
matika matika is offline Offline
Newbie Poster

Help Re: sorting an array of string

  #3  
Jun 9th, 2004
:rolleyes: sorry but may be u did not understood my question
i need to sort an array of characters which contains names of students alphabeticly
and i'm asking if there is a function that do this job quickly (sorting the array of chararcters alphabeticly)
thx
matika
Reply With Quote  
Join Date: Jun 2004
Posts: 9
Reputation: kalachylde is an unknown quantity at this point 
Rep Power: 0
Solved Threads: 1
kalachylde's Avatar
kalachylde kalachylde is offline Offline
Newbie Poster

Re: sorting an array of string

  #4  
Jun 9th, 2004
wait... are you trying to list names of students alphabetically or are you trying to change the characters in each students name around into alphabetical order?
Reply With Quote  
Join Date: May 2004
Posts: 250
Reputation: FireNet will become famous soon enough FireNet will become famous soon enough 
Rep Power: 6
Solved Threads: 6
FireNet's Avatar
FireNet FireNet is offline Offline
Posting Whiz in Training

Re: sorting an array of string

  #5  
Jun 9th, 2004
hey,I will give you a direction.

You will first have to make a funtion which will compare 2 strings and say which one is greater by comparing the individual chars and returning when it hit's a char which is no equal to the other, like sad sam, (in this case m > d).

Put this into a sort algorithm.

[think this is not much help eh?,see what you can do and you might even suprise yourself.Sometimes just a direction can do wonders.If you still have problems post here,maybe with what you have coded and we will check it out.your will learn more if you do it yourself ]
See what you can, remember what you need

Fourzon | Earn via Coding
Reply With Quote  
Join Date: May 2004
Posts: 19
Reputation: matika is an unknown quantity at this point 
Rep Power: 5
Solved Threads: 0
matika matika is offline Offline
Newbie Poster

Re: sorting an array of string

  #6  
Jun 9th, 2004
i'm trying to list names of students alphabetically
Reply With Quote  
Join Date: May 2004
Posts: 19
Reputation: matika is an unknown quantity at this point 
Rep Power: 5
Solved Threads: 0
matika matika is offline Offline
Newbie Poster

Re: sorting an array of string

  #7  
Jun 9th, 2004
void arranging()
{
char
temp[30],
name[50][30];

float
temp1,
temp2,
temp3,
temp4,
temp5,
temp6,
grade1[50],
grade2[50],
grade3[50],
grade4[50],
grade5[50],
grade6[50];
int
i=0,
j,
y,
x,
n=0;;



ifstream fin("names.txt");
while(fin)
{
fin.getline(name[i],30);
i++;
}
fin.close();
ifstream finn("grades.txt");
while(finn)
{
finn>>grade1[n];
finn>>grade2[n];
finn>>grade3[n];
finn>>grade4[n];
finn>>grade5[n];
finn>>grade6[n];
n++;
}
finn.close();
for(y=0;y<i;y++)
{
for(j=y+1;j<i;j++)
{
if(name[j][0]<name[y][0])
{
for(x=0;x<30;x++)
{
temp[x]=name[j][x];
temp1=grade1[j];
temp2=grade2[j];
temp3=grade3[j];
temp4=grade4[j];
temp5=grade5[j];
temp6=grade6[j];
}
for(x=0;x<30;x++)
{
name[j][x]=name[y][x];
grade1[j]=grade1[y];
grade2[j]=grade2[y];
grade3[j]=grade3[y];
grade4[j]=grade4[y];
grade5[j]=grade5[y];
grade6[j]=grade6[y];

}
for(x=0;x<30;x++)
{
name[y][x]=temp[x];
grade1[y]=temp1;
grade2[y]=temp2;
grade3[y]=temp3;
grade4[y]=temp4;
grade5[y]=temp5;
grade6[y]=temp6;
}
}
}
}
for(y=0;y<i;y++)
{
for(j=y+1;j<i;j++)
{

if(name[j][0]==name[y][0])
{
if(name[j][1]<=name[y][1])
{
for(x=0;x<30;x++)
{
temp[x]=name[j][x];
temp1=grade1[j];
temp2=grade2[j];
temp3=grade3[j];
temp4=grade4[j];
temp5=grade5[j];
temp6=grade6[j];
}
for(x=0;x<30;x++)
{
name[j][x]=name[y][x];
grade1[j]=grade1[y];
grade2[j]=grade2[y];
grade3[j]=grade3[y];
grade4[j]=grade4[y];
grade5[j]=grade5[y];
grade6[j]=grade6[y];
}
for(x=0;x<30;x++)
{
name[y][x]=temp[x];
grade1[y]=temp1;
grade2[y]=temp2;
grade3[y]=temp3;
grade4[y]=temp4;
grade5[y]=temp5;
grade6[y]=temp6;
}
}
}

}
}
for(y=0;y<i;y++)
{
for(j=y+1;j<i;j++)
{
if(name[j][0]==name[y][0])
{
if(name[j][1]==name[y][1])
{
if(name[j][2]<name[y][2])
{
for(x=0;x<30;x++)
{
temp[x]=name[j][x];
temp1=grade1[j];
temp2=grade2[j];
temp3=grade3[j];
temp4=grade4[j];
temp5=grade5[j];
temp6=grade6[j];
}
for(x=0;x<30;x++)
{
name[j][x]=name[y][x];
grade1[j]=grade1[y];
grade2[j]=grade2[y];
grade3[j]=grade3[y];
grade4[j]=grade4[y];
grade5[j]=grade5[y];
grade6[j]=grade6[y];
}
for(x=0;x<30;x++)
{
name[y][x]=temp[x];
grade1[y]=temp1;
grade2[y]=temp2;
grade3[y]=temp3;
grade4[y]=temp4;
grade5[y]=temp5;
grade6[y]=temp6;
}
}
}
}
}
}
ofstream fout("names.txt");
for(x=1;x<i;x++)
{
fout<<name[x]<<endl;
}
fout.close();
ofstream fott("grades.txt");
for(x=1;x<i;x++)
{
fott<<grade1[x]<<" ";
fott<<grade2[x]<<" ";
fott<<grade3[x]<<" ";
fott<<grade4[x]<<" ";
fott<<grade5[x]<<" ";
fott<<grade6[x]<<endl;
}
fott.close();

}
that's what i wrote it suposes that it took the names from a file
this sort the names it only compares the 3 1st char in the name
i.e. it sort the names according to the 3 first characters
i didnt succed to compare all the characters of the name
if u can help i'll be thxful
Reply With Quote  
Join Date: Apr 2004
Posts: 3,473
Reputation: Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light 
Rep Power: 16
Solved Threads: 138
Colleague
Dave Sinkula's Avatar
Dave Sinkula Dave Sinkula is offline Offline
long time no c

Re: sorting an array of string

  #8  
Jun 9th, 2004
C or C++?

The C solution is qsort, and the only difference from what was already shown is the comparison function you write.

In C++ there is a std::sort.
#include <iostream>
#include <vector>
#include <algorithm>
typedef std::vector<std::string>::iterator		 iter;
typedef std::vector<std::string>::const_iterator  citer;
void Show(std::vector<std::string> &alist, const char *label = "")
{
   if ( label )
   {
	  std::cout << label << std::endl;
   }
   for ( citer it = alist.begin(), end = alist.end(); it < end; ++it )
   {
	  std::cout << ' ' << *it << std::endl;
   }
}
int main()
{
   // Make a list.
   std::vector<std::string> mylist;
   mylist.push_back("Phil");
   mylist.push_back("Bob");
   mylist.push_back("Fred");
   // Show the list.
   Show(mylist, "Before:");
   // Sort the list.
   std::sort(mylist.begin(), mylist.end());
   // Show the list.
   Show(mylist, "After:");
   return 0;
}
/* my output
Before:
 Phil
 Bob
 Fred
After:
 Bob
 Fred
 Phil
*/
Reply With Quote  
Join Date: May 2004
Posts: 250
Reputation: FireNet will become famous soon enough FireNet will become famous soon enough 
Rep Power: 6
Solved Threads: 6
FireNet's Avatar
FireNet FireNet is offline Offline
Posting Whiz in Training

Re: sorting an array of string

  #9  
Jun 11th, 2004
hey,here a simple way to see which of 2 strings is greater

int str_alp(char *s1,char *s2)
{
    if(strcmp(s1,s2)==0)return(0);   //if they are equal

        for(int i=0;s1[i]!=0;i++)
        {
              if(s1[i] > s2[i])return(1);
              else if(s1[i] < s2[i])return(2);
        }

    return (2);  //hey if they are not equal and s1 not greater than s2 then s2 is greater
}

See if you can use it
See what you can, remember what you need

Fourzon | Earn via Coding
Reply With Quote  
Join Date: Apr 2004
Posts: 3,473
Reputation: Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light 
Rep Power: 16
Solved Threads: 138
Colleague
Dave Sinkula's Avatar
Dave Sinkula Dave Sinkula is offline Offline
long time no c

Re: sorting an array of string

  #10  
Jun 11th, 2004
>hey,here a simple way to see which of 2 strings is greater

Why not just check to see whether strcmp returns 1 (for greater than)? Or simply return the value returned by strcmp?
Reply With Quote  
Reply

Only community members can participate in forum threads. You must register or log in to contribute.

DaniWeb C Marketplace
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)

 

Thread Tools Display Modes

Similar Threads
Other Threads in the C Forum

All times are GMT -4. The time now is 9:26 pm.
Forum system based on vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
©2003 - 2008 DaniWeb® LLC