题解 | #字符串排序#

字符串排序

http://www.nowcoder.com/practice/5af18ba2eb45443aa91a11e848aa6723

// #include<stdio.h>
// #include<string.h>
// int main()
// {
//     int n;
//     char str[1000][100];
//     char *ptstr[1000];//c语言中,char*表示字符指针类型,当其指向一个字符串的第一个元素时,它就可以表示这个字符串。
//     scanf("%d",&n);
//     int c;
//     getchar();
//     for (int i=0;i<n;i++)
//     {
//         gets(&str[i][100]);
//         ptstr[i]=&str[i][100];
//     }
//     for (int j=0;j<n-1;j++)
//     {
//         for(int k=j+1;k<n;k++)
//         {
//             if (strcmp(ptstr[j],ptstr[k])>0)//参数 str1 和 str2 是参与比较的两个字符串。
//             {
//                 char*temp;                      //如果返回值 > 0,则表示 str2 小于 str1。
//                 temp=ptstr[k];
//                 ptstr[k]=ptstr[j];
//                 ptstr[j]=temp;
//             }
//         }
//     }
//     for (int ii=0;ii<n;ii++)
//     {
//         puts(ptstr[ii]);
//     }
//     return 0;
// }



#include <stdio.h>
//在这里进行变型,比较的数组是个指针数组,需要对指针指向的内容进行比较
int cmp(const char** a, const char** b)
{
    return strcmp((char *)*a, (char *)*b);
}
int main()
{
    int num = 0;
    scanf("%d\n",&num);//malloc的返回值是一个指针,指向一段可用内存的起始位置,
    char** str = (char**)malloc(sizeof(char*) * (num));  //指向二维数组,一维数组指针的二级指针 
    char* p = (char*)malloc(sizeof(char) * (num) * 101);   //为二维数组的每个元素分配空间
    memset(p, sizeof(char) * (num) * 101, 0);
    for(int i=0; i<num; i++){
        scanf("%s\n",p+i*101);
        str[i] = p+i*101; //str[i] 是二维数组的一维数组指针  str[i]  = *(str + i)
    }
    //利用strcmp比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。
    //strcmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,
    //若差值不为0 则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。
    qsort(str, num, sizeof(char *), cmp);
    for(int j=0; j<num; j++){
        printf("%s\n",str[j]);
    }
}

全部评论

相关推荐

05-29 20:34
门头沟学院 C++
KarlAllen:得做好直接春招的准备。学历差的话,一是面试要求会比学历好的严格不少,二是就算面试通过了也会被排序。总之暑期和秋招对于学历差的就是及其不友好
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务