C言語関係掲示板

過去ログ

No713 文字列をアルファベット順に並び替える

[戻る] [ホームページ]
No.8565

アルファベット順に並び替えるには?
投稿者---アカべコ77(2003/07/22 14:08:44)


はじめまして、初心者なものでアドバイス願います。

//宣言
char *alp[15];
このポインタ配列に、
/* alp[0]= aede; alp[1] = acde; alp[2] = decf;
alp[3]= cdea;..... alp[14] = abcd; */
のような文字列がすでにはいっていて、
これらの文字列を以下のように
アルファベット順に配列に入れなおしたいのですが
/* alp[0]= abcd; alp[1]=acde; alp[2] = aede;
alp[3]= cdea;.... alp[14] = decf; のように*/
どのようにプログラムすればよいでしょうか?
文字列比較にstrcmpですかね? qsort()などもあるみたいなのですが
使い方がわかりません。
どなたか教えて頂けたら幸いです。
またこれらの文字列はcsvファイル形式から読み出した
文字列をポインタ配列に入れたものです。以下がその部分です。
(csv形式とはカンマで区切られたファイルです)

#define PTS 15
char *pts_label[PTS]; //文字列配列
char *token;
int k;
fp = fopen( "example.csv", "r" );
if( fp == NULL ){
printf(" Reading Error... \n" );
return 0;

for( k = 0; k < PTS; k++ ){
token = strtok(NULL, ","); //カンマを読み飛ばし文字列をトークンにいれる
pts_label[k] = (char *)malloc(strlen(token)+1); //メモリ確保
strcpy(pts_label[k], token); //文字列をpts_label[k]に入れる
printf("LABEL_%d, %s\n", k+1, pts_label[k]);
}

pts_label[k]入る文字列はalp[]に対応しているとして理解してもらって
結構です。宜しくお願いします。

No.8568

Re:アルファベット順に並び替えるには?
投稿者---nop(2003/07/22 16:38:15)


こんな感じかな。

/* ---------- Standard Header Include ---------- */
#include    <stdio.h>
#include    <stdlib.h>
#include    <string.h>


/* ************************************************************
    関数名【 comp() 】
        比較処理
    処理概要
        qsort() 用の比較関数
    引数
        1) elm1 : 比較対象要素
        2) elm2 : 比較要素
    戻り値
        比較結果
************************************************************ */
int comp( const void *elm1, const void *elm2 )
{
    return strcmp( *(char**)elm1, *(char**)elm2 );
}

/* ************************************************************
    関数名【 main() 】
        メイン処理
    処理概要
        メイン処理
    引数
        なし
    戻り値
        処理結果
************************************************************ */
int    main( void )
{
    /* ***** 内部変数定義 ***** */
    int     i;
    char    *str[] =
    {
        "abcd",
        "defg",
        "aabc",
        "adf",
        "cvb",
    };

    puts( "ソート前" );

    for( i=0; i<sizeof(str)/sizeof(str[0]); i++ )
    {
        /* ***** 表示 ***** */
        printf( "  %s\n", str[i] );
    }

    /* ***** ソート ***** */
    qsort( str, sizeof(str)/sizeof(str[0]), sizeof(str[0]), comp );

    puts( "ソート後" );

    for( i=0; i<sizeof(str)/sizeof(str[0]); i++ )
    {
        /* ***** 表示 ***** */
        printf( "  %s\n", str[i] );
    }
    return 0;
} /* ***** main() ***** */