c语言-C语言:用qsort()和strcmp实现对字符串数组的字典序排序

问题描述

C语言:用qsort()和strcmp实现对字符串数组的字典序排序

#include
#include
#include
int mycomp(const void p1,const void *p2)
{
const char *a1=(const char
)p1;
const char a2=(const char)p2;
return strcmp(a1,a2);
}
int main()
{
int i;
char a[5]={"ssioo","abcde","bcade","bacd","jjjjj"};
qsort(a,5,sizeof(char
),mycomp);
for(i=0;i<5;i++)
{
printf("%s ",a[i]);
}

return 0;

}
warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]|
输出结果是没有经过排序的
问:要如何修改?要实现字符串数组字典序排序有什么思路?

解决方案

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

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

int main()
{
    char a[5][20] = {"ssioo","abcde","bcade","bacd","jjjjj"};
    char** s = (char **)new char[20];
    for(int i = 0; i < 5; i++)
    {
        s[i] = new char[20];
        strcpy(s[i], a[i]);
    }
    qsort(s, 5, sizeof(char *), mycomp);
    for(int i = 0; i < 5; i++)
        printf("%sn", s[i]);
    return 0;
}

输出
abcde
bacd
bcade
jjjjj
ssioo

解决方案二:

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

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

int main()
{
    char *a[] = {"ssioo","abcde","bcade","bacd","jjjjj"};
    qsort(a, 5, sizeof(char *), mycomp);
    for(int i = 0; i < 5; i++)
        printf("%sn", a[i]);
    return 0;
}

解决方案三:

const char *a1=(const char)p1;
const char a2=(const char)p2;//这些都是类型不匹配

时间: 2024-10-06 02:18:27

c语言-C语言:用qsort()和strcmp实现对字符串数组的字典序排序的相关文章

win7如何更改语言 电脑语言改成英文的方法

今年evad3rs团队发布的iOS 7完美越狱工具有些特殊,中国版iOS7完美越狱工具中,捆绑有太极助手插件,此插件类似流氓插件,容易导致iOS越狱设备出现白苹果现象(国外版无此插件).目前比较好的解决办法是:在使用电脑中越狱的时候,将电脑语言改为英文,可绕过该插件.但很多电脑小白用户还不知道如何更改电脑语言,因此本文将为大家详细介绍下电脑语言更改教程. 如何更改电脑语言 电脑语言改为英文方法 以下笔者以Windows 7系统截图演示,教大家如何更改电脑语言.其他XP或者Win8系统设置方法与此

c语言-C语言字符串数组定义问题

问题描述 C语言字符串数组定义问题 #include int main() { char *ptr[10]; 为什么这样运行时会出错? gets(ptr[0]); } #include int main() { char ptr[10][20]; 而这样运行时则没有问题? gets(ptr[0]); } char *p[10] 与 char p[10][20] 之间有什么不同? 还是说在这里是gets()函数用错了? 万分感谢! 解决方案 哥们,你的第一个定义的是数组指针,第二定义的是一个二维数

c语言-c 语言 字符串和 数组

问题描述 c 语言 字符串和 数组 char * a = "abc"; char a[4] = "abc"; 以上有什么区别和联系 解决方案 char * a = "abc"; 其实是 char 一个你看不见的变量[] = "abc"; char *a = 一个你看不见的变量; 解决方案二: 前者是一个字符指针,定义时仅分配了指针变量的空间,该指针指向一个字符串常量"abc"的首地址,a可修改(可做左值)但

c语言-C语言递归的内存释放问题

问题描述 C语言递归的内存释放问题 我用C语言实现alpha-beta极小极大算法来做一个棋类游戏的AI,博弈树是用递归的方式构造的,然后发现AI每下一步程序的内存都在增大,原来是因为递归没有释放内存. 耗内存的指针是棋盘 char ** chessboard; 于是我在递归函数的每一个return之前都把 chessboard 给释放了,发现内存还是一直在涨,求解.. 解决方案 把递归函数实现贴出来. 解决方案二: 估计释放的不全.二级指针要分两级释放. 解决方案三: 二级指针的释放是要分两步

c语言-C语言新人关于链表的问题

问题描述 C语言新人关于链表的问题 如何实现对一个链表进行排序后的输出,但是不改变链表本身. 不能新建链表来拷贝. 解决方案 我也是新人,如果是这样的话.会比较麻烦.我的想法是这样的.先找到链表尾.知道一共有多少个数据,然后创建一个结构体数组,结构体中定义Int 排序,你的类型指针变量,排序后将排序的顺序存入数组.将链表地址存入指针变量,建一个循环,依次输出.不过此种方法依然需要建一个数组.不知道行不行 解决方案二: 必须借助内存空间,完成排序工作. 解决方案三: 你把链表的每个元素读出来存到一

xml-有所有国家不同语言的字符串数组

问题描述 有所有国家不同语言的字符串数组 我一直在找这个资源,但是找了好久都没找到,有人知道在哪儿可以找到世界上所有国家的清单吗,以这种格式并且显示多种语言? <string-array name="countries_array"> <item>Australia</item> <item>Belgium</item> <item>Cameroon</item> <item>Denmark

c语言-【C语言】用scanf赋值给带指针的字符串

问题描述 [C语言]用scanf赋值给带指针的字符串 我希望是输入几个单词之后,这几个单词成为一个字符串,但是变异之后仍然有问题. #include<stdio.h> #include<stdlib.h> #include<string.h> int main(int argc, char *argv[]) { int n; printf("Number of words: "); scanf("%d", &n); con

编程c语言-c语言操作试题 答案看不懂

问题描述 c语言操作试题 答案看不懂 规定输入的字符串中只包含字母和*号.编写函数fun,其功能是:除了字符串前导和尾部的*号外,将串中其他的*号全部删除.形参h已指向字符串中第一个字母,形参P指向字符串中最后一个字母.在编写函数时,不得使用C语言提供的字符串函数. 例如,若字符串中的内容为"****A*BC*DEF*G*******",删除后,字符串中的内容应当是"*****ABCDEFG********". 注意:部分源程序给出如下. 请勿改动主函数main和其

编程 语言 c语言-C语言编程 加减乘除。。。

问题描述 C语言编程 加减乘除... 有这样一道题,现在由于精度问题,数字加减会有误差,现要编辑一个程序,使得输入数字无误差,并给定长度在规定字符串数组(30),求加法(包含小数 解决方案 shell数值计算(加减乘除) 解决方案二: 我是来围观的我是来围观的我是来围观的 解决方案三: #include #include #include using namespace std; void main() { char ch[ 30 ]; memset( ch, '?', 30 ); cin>>