------------------------------------------------------------------------------
MC logo
Simple String Sort
[^] CSc 220 Home
------------------------------------------------------------------------------
[Introduction] [Boolean and Control] [Functions] [Arrays and Pointers] [Dynamic Arrays] [Array Errors] [Command Array] [Standard Containers] [Structs and Classes] [Automatic Pointer] [Multi-File Programs] [Copying Objects] [Templates] [Inheritance] [Plain C I/O] [Type Odds And Ends] [Plain C Strings] [File I/O]
[C Strings] [More C Strings] [Plain C Arg Lister] [Fancy Plain C Arg Lister (With Pointers)] [Simple String Sort]
simsort.c
#include <stdio.h>
#include <string.h>

/* 
 * Program to read a list of strings from standard input and print them in
 * sorted order.  This uses a simple selection sort.
 */

#define MAX_STRING_SPACE        1000
#define MAX_NUM_STRINGS         250
#define MAX_STRING_SIZE         50
int main(void)
{
        /* Where the general string contents are stored. */
        char string_space[MAX_STRING_SPACE];

        /* The start of each string. */
        char *strings[MAX_NUM_STRINGS];

        /* Read the strings. */
        char buf[MAX_STRING_SIZE];
        char *next_space = string_space;
        int inloc = 0;
        while(scanf("%s", buf) == 1) {
                /* Find the length of the string and see if it fits. */
                int length = strlen(buf) + 1;
                if(next_space + length >= string_space + MAX_STRING_SPACE)
                        break;
                if(inloc >= MAX_NUM_STRINGS)
                        break;

                /* Place the string into the structure. */
                strings[inloc++] = next_space;
                strcpy(next_space, buf);
                next_space += length;
        }

        printf("--------------------------------------------------\n");

        /* Perform the sort.  Outer loop goes through destination of the
           minimum string. */
        int strloc;
        for(strloc = 0; strloc < inloc - 1; ++strloc) {
                /* Scan the remaining strings for ones smaller. */
                int scan;
                for(scan = strloc + 1; scan < inloc; ++scan) {
                        if(strcmp(strings[strloc], strings[scan]) > 0) {
                                /* Exchange the strings. */
                                char *tmp = strings[strloc];
                                strings[strloc] = strings[scan];
                                strings[scan] = tmp;
                        }
                }
        }

        /* Print 'em. */
        for(strloc = 0; strloc < inloc; ++strloc) {
                printf("%s\n", strings[strloc]);
        }
}