回 帖 发 新 帖 刷新版面

主题:把10个字符串按ASCII排序

我不要代码,只想要解题思路。
我自己想的是用strcmp函数比较两个字符串,把低位的字符串地址保存在中立变量里,然后用中立变量去和下一个字符串比较,因为10字符串都保存在一个二维数组里。一直比较到数组的最后一元素,这样能保证所得到的是10字符串中排位最低的那个字符串,然后重复,一直比较完10个字符串,这个的解题思路是否有错?
求指点,先谢谢了,感激不尽啊。

回复列表 (共2个回复)

沙发

"因为10字符串都保存在一个二维数组里"
--- 是不是类似于 char ss[10][256] = { "ab", "AB", "3", "234", "qr", "xx", "dfasfas", "xe", "qq", "fxxx" }; ?

如果是:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int __cdecl compare( const void* a, const void* b )
{
    return strcmp( (const char*)a, (const char*)b );
}

int main()
{
    char ss[10][256] = { "ab", "AB", "3", "234", "qr", "xx", "dfasfas", "xe", "qq", "fxxx" };
    qsort( ss, sizeof(ss)/sizeof(ss[0]), sizeof(ss[0]), &compare );

    for( int i=0; i<sizeof(ss)/sizeof(ss[0]); ++i )
        printf( "%s\n", ss[i] );

    return 0;
}

板凳

提供另外一种做法,由bruceteen@1楼的代码修改而来

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int __cdecl compare( const void* a, const void* b )
{
    return strcmp( *(const char**)a, *(const char**)b );
}

int main()
{
    const char *ss[] = { "ab", "AB", "3", "234", "qr", "xx", "dfasfas", "xe", "qq", "fxxx" };
    qsort( ss, sizeof(ss)/sizeof(ss[0]), sizeof(ss[0]), &compare );

    for( int i=0; i<sizeof(ss)/sizeof(ss[0]); ++i )
        printf( "%s\n", ss[i] );

    return 0;
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册