关于字符串数组qsort排序中问题

我的IDE是codeblocks,内置编译器是gcc。win7 64bit。

如下:

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <exception>
#include <algorithm>

using namespace std;

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

int main()
{
    char ss[5][20] = {"hello","world","a","b","aa"};

    char** s = (char **)new char[5];
    for(int i=0;i <5;++ i)
    {
        s[i] = new char[20];
        strcpy(s[i],ss[i]);
    }

    puts("before sort:");
    for(int i=0;i <5;++ i) printf("%s\n",s[i]);

    qsort(s,5,sizeof(char *),cmp);
      puts("after sort:");
    for(int i=0;i <5;++ i) printf("%s\n",s[i]);


    return 0;
}

上面一旦使用了char**开辟字符串数组就必须用sizeof(char )和(char **),但是用char[][]初始化之后的数组又必须用sizeof(s[0])和(char *),这里面的原因是什么?char[][]不是按照数组名编译器当成指针来用的原则吗?

2个回答

你这里写错了

  char** s = (char **)new char[5];

    --->

    char** s = new char* [5];

字符串数组qsort排序......
答案就在这里:字符串数组qsort排序
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
qsort函数排序字符串数组
qsort函数排序字符串数组 描述: qsort()函数是一个库函数,也是一个万能的排序函数,只需要自己写好compare()函数即可,那么怎么用qsort()函数来排序字符串呢? 思路: 个人感觉,这个问题很好解决,困难的就是在调用函数时,参数应该怎么写。 有两个需要注意的点!!!!! 先来看一下main()函数 int main(void) { char *arr[] = {&quot;dddd&quot;...
qsort排序
1:整型排序: #include&amp;lt;bits/stdc++.h&amp;gt; using namespace std; int a[100]; int cmp(const void *a,const void *b) { return (*(int*)a-*(int*)b); } int main() { int n; cin&amp;gt;&amp;gt;n; fo...
qsort 排序
使用qsort排序一个整型数组,一个浮点型数组,一个字符串数组。#include <stdio.h> #include <stdlib.h>int Compare(void* elem1,void* elem2) { return (*(int *)elem1)-(*(int*)elem2); } void Print(int * arr,int sz) { int i = 0;
qsort排序的问题
struct manu rn int b, s, c;rn;rnrnint cmp(const void* a, const void *b) rn return ((manu *) a)->c - ((manu *) b)->c;rnrn这么一行代码,为什么编译时候总报语法错误,在eclipse中提示是c不能被解析rngcc编译报错:expected expression before ‘)’ tokenrn怎么看也是没问题的啊
关于字符串数组的排序
比如 String s[6]=new String"1","1-1","1-2","2-1","1-1-1","1-1-1-1",用java.util.sort方法可以吗?
关于qsort对CArry的排序的问题
小弟现有一个由结构体组成的动态数组,现要对其进行排序,如何进行?rn[code=c] typedef struct FileNamern rn CString filenames;rn int nfilename;rn FileName;rn typedef CArray m_arrfilenames;rn m_arrfilenames m_filename;[/code]rnrnrn[code=c]void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );rn[/code]rn就是这里的返回值应该怎么写?rn[code=c]int Comparison(const void *a, const void *b)rnrn return ;rn[/code]rn求赐教rn
字符串数组重新排序的问题
也是同一天的面试题。给定一个数组&quot;aa bb cee ee a&quot;,使用int SawpWords(char *str)排序之后str的新顺序为&quot;a aa bb cee ee&quot;;同时题中重点说明了防止内存泄漏问题。也是没有完全写好,真的是手写代码难呀,还是基础不满分。回来之后认真研究了一下,把最终代码写出来了。void AddNewElementToList(list&amp;lt;char*&amp;gt; &amp;a...
字符串数组的排序
Java毕向东课程小练习:字符串数组的排序 第一步,定义好数组后,写一个排序数组的方法。 思路: 曾经玩过int数组排序:选择,冒泡。 字符串排序同理。 for嵌套循环4. 循环中进行元素大小的比较,满足条件就进行位置置换数值比较可以使用比较运算符,但是对象比较必须使用方法。比较对象的方法:compare 字符串排序同理。 循环中进行元素大小的比较,满足条件就进行位置置换数值比较可以使用比较运算...
七种qsort排序
经典 很有帮助~~~~~~~~~~~
qsort排序失败
这是我的代码这是我的测试结果各位大神求解释为什么会排序失败按道理来说不是升序就是降序偏偏这么奇葩rn#includern#includern#includernusing namespace std;rnint comp(const void *a,const void *b)rnrnint c;rnreturn c=((string *)a<=(string *)b?1:-1);rnrnint main()rnrn int a[7];rn for(int x=0;x<7;x++)rn cin>>a[x];rn qsort(a,7,sizeof(int),comp);rn qsort(a,7,sizeof(int),comp);rn rn for(int x=0;x<7;x++)rn cout<
常用排序之qsort和sort
常用函数qsort和sort用法总结
C语言——qsort排序
使用qsort()函数对随机生成的数组进行排序: 要点: 1、产生随机数的方法 2、C语言内置qsort()使用方法 3、程序运行的计时方法 #include #include #include #define N 100000 void sort_begin(int a[]){ int i; srand(time(NULL)); for (i = 0; i < N; ++
【Eternallyc】qsort排序函数用法
qsort   功 能: 使用快速排序例程进行排序 用 法: void qsort(void base, int nelem, int width, int (*fcmp)(const void ,const void *));   各参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针用于确定排序的顺序 排序方法有很多种, 选择排序,冒泡排序,归并
Qt排序qSort使用方法
助手文档中对于qSort的介绍中,对于简单类型的排序讲解的很详细了。 这里主要讲对于结构体类型的排序 struct Info{ QString id; QString name; int age; }; QList infoList; 在这里对于infoList按照id字符串排序 void NetManager::devListSort(QList *list) {
qsort()函数排序
#include <iostream> #include <algorithm> #include <math.h>int compare_desc(const void *a , const void *b) ; void main() { int A[3] = {2 , 1 , 3} ; qsort(A , 3 , sizeof(int) , compare_desc) ;
排序库函数sort()和qsort()
sort是STL中提供的算法,头文件为#include以及using namespace std; 函数原型如下:template void sort ( RandomAccessIterator first, RandomAccessIterator last );   template void sort ( RandomAccessIterator first, RandomAccess
排序之快排qsort
#include<stdio.h> #include<stdlib.h> #include<time.h>/* rand产生的随机数从0~rand_max(32767) 产生从x~y的随机数k=rand()%(y-x+1)+x *///k=rand()%(right-left+1)+left; void swap(int& a,int& b) { if(a!=b)
通讯录排序(qsort快速排序)
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct { char friendname[10]; long data; char number[17]; }DATA; int cmp(const void*a,const void*b) { DATA *x,*y; x=
qsort()函数排序实例
qsort函数实例 #分析+代码+测试数据 分析 qsort在c++的algorithm头文件中,注意其参数的使用。比如 // 数在数组num[210]中的范围是闭区间 [0,n-1] 或者[1,n] //对应的第一个参数num,第二个参数是n。对应的第一个参数是num+1,第二个参数是n+1. //第三个参数写成sizeof(num[0]),数组每个元素的空间大小。 //第四个参数是自定义cmp...
二分查找,qsort排序
从给定n个数中查找指定的数m, 输出它是第几大的数(不用考虑重复的)考虑到程序运行速度,排序应该用qsort,查找用二分查找rnrn#includern#includernint compare(const void *, const void *);rnint BinarySearch(int a[], const int &x,int n);rnvoid main()rnrn int a[10000],i,n,m,middle;rn scanf("%d%d",&n,&m);rn for(i=0;i
最优排序(qsort)
我自己用`C# 抄的一个QSORT 和ARRAY.SORT进行比较rn用1000万条数据做实验, 发现自己抄的还是远远不如系统函数 rn自己抄的QSORT 耗时 2.75秒rnARRAY.SORT 耗时 1.7 -1.8秒rnrn系统的到底使用了什么样的优化措施呢??rnrn代码如下rn代码没有加注释, 因为注释和STL中的QSORT一样, 只有将比较函数直接在程序里面改成 (> < >= <= ==) 这样可以节省很多时间rn// MAIN 函数rn static void Main(string[] args)rn rn int[] pp = new int[10000000];rn Random xx1 = new Random(0);rnrn for (int i = 0; i < 10000000; i++)rn rn pp[i] = xx1.Next(1, 10001);rn rn rn DateTime dt = DateTime.Now;rn //Bubblesort(pp);rn // Array.Sort(pp);rn //QuickSort(pp);rn //shortsort(pp, 0, pp.Length -1);rnrn QuickSort qq = new QuickSort();rn qq.QSort(pp, new cpmpare(qq.cpmpareFunction));rn DateTime dt1 = DateTime.Now;rn TimeSpan xx = dt1.Subtract(dt);rn System.Console.WriteLine(xx.TotalSeconds.ToString());rn for (int i = 0; i < 100; i++)rn rn System.Console.Write(pp[i].ToString() + " ");rn rn rnQSORT 类rn-----------------------------------------rndelegate int cpmpare(int a, int b);rn class QuickSortrn rnrn const int CUTOFF=8;rn /* this is a exchange data*/rn private int data;rn public int QSort(int[] arrQuick, cpmpare comp)rn rnrn int[] hiStack = new int[arrQuick.Length];rn int[] lowStack = new int[arrQuick.Length];rn int hi, low, mid; /* palce for hi-data, low-data, mid-data*/rn int hi_Stack, low_Stack; /* place of imitate stack */rn int size;/* */rn int length = 0; /* for stack which is used for imitate stack*/rn int maxPosition;rn int dataC, hiB,lowB;rn if (arrQuick.Length < 2)rn rn return 0;rn rn hi = arrQuick.Length - 1;rn low = 0;rn recurse:rn size = (hi - low) + 1;rnrn if (size < CUTOFF)rn rn while (hiB > lowB)rn rn maxPosition = lowB;rn dataC = arrQuick[lowB];rn for (int i = lowB; i <= hiB; i++)rn rn if (arrQuick[i] > dataC)rn rn dataC = arrQuick[i];rn maxPosition = i;rn rn rnrn dataC = arrQuick[hiB];rn arrQuick[hi] = arrQuick[maxPosition];rn arrQuick[maxPosition] = data;rn hi--;rn rn rnrn elsern rn mid = low + size / 2;rnrn if (arrQuick[low] > arrQuick[mid]) rn rn data = arrQuick[low];rn arrQuick[low] = arrQuick[mid];rn arrQuick[mid] = data;rn rnrn if (arrQuick[low] > arrQuick[hi])rn rn data = arrQuick[low];rn arrQuick[low] = arrQuick[hi];rn arrQuick[hi] = data;rn rnrn if (arrQuick[mid] > arrQuick[hi])rn rn data = arrQuick[mid];rn arrQuick[mid] = arrQuick[hi];rn arrQuick[hi] = data;rn rnrn low_Stack = low;rn hi_Stack = hi;rn for (; ; )rn rn if (mid > low_Stack)rn rn do low_Stack++; while (low_Stack < mid && arrQuick[low_Stack]<=arrQuick[mid]);rnrn rnrn if (mid <= low_Stack)rn rn do low_Stack++; while (low_Stack <= hi && arrQuick[low_Stack]<=arrQuick[mid]);rn rnrn do hi_Stack--; while (hi_Stack > mid && arrQuick[hi_Stack] > arrQuick[mid] );rnrn if (hi_Stack < low_Stack) break;rnrn data = arrQuick[low_Stack];rn arrQuick[low_Stack] = arrQuick[hi_Stack];rn arrQuick[hi_Stack] = data;rnrn if (mid == hi_Stack)rn rn mid = low_Stack;rnrn rn rnrn hi_Stack++;rnrn if (mid < hi_Stack)rn rn dorn rn hi_Stack--;rn while (hi_Stack > mid && arrQuick[hi_Stack] == arrQuick[mid]);rn rn if (mid >= hi_Stack)rn rn dorn rn hi_Stack --;rn while (hi_Stack > low && arrQuick[hi_Stack] == arrQuick[mid]);rn rnrn if (hi_Stack - low >= hi - low_Stack)rn rn if (low < hi_Stack)rn rn lowStack[length] = low;rn hiStack[length] = hi_Stack;rn length ++;rn /* save big recursion for later */rnrn if (low_Stack < hi)rn rn low = low_Stack;rn goto recurse; /* do small recursion */rn rn rnrn elsern rn if (low_Stack < hi)rn rn lowStack[length] = low_Stack;rn hiStack[length] = hi;rn ++length; /* save big recursion for later */rn rnrn if (low < hi_Stack)rn rn hi = hi_Stack;rn goto recurse; /* do small recursion */rn rn rnrn rnrn --length;rn if (length >= 0)rn rn low = lowStack[length];rn hi = hiStack[length];rn goto recurse; /* pop subarray from stack */rn rn elsern return 0; /* all subarrays done */rnrn rnrn public int cpmpareFunction(int a, int b)rn rn /* if (a > b)rn rn return 1;rn rn else if (a < b)rn rn return -1;rn rn elsern rn return 0;rn */rn return a - b;rn rnrn private void shortsort(int[] arrQuick, int lo, int hi, cpmpare comp)rn rn int maxPosition;rn int dataC;rnrn while (hi > lo)rn rn maxPosition = lo;rn dataC = arrQuick[lo];rn for (int i = lo; i <= hi; i++)rn rn if (arrQuick[i] > dataC)rn rn dataC = arrQuick[i];rn maxPosition = i;rn rn rnrn dataC = arrQuick[hi];rn arrQuick[hi] = arrQuick[maxPosition];rn arrQuick[maxPosition] = data;rn hi--;rn rn rn
qsort的二级排序
if(c->x != d->x) return c->x-d->x;rnrnelse return d->y - c->y;rnrn请问是什么意思?rn详细一些。O(∩_∩)O谢谢~!
七、排序(4)——qsort()
一、回顾 时间复杂度 是稳定排序 是原地排序 冒泡排序 O(n2) √ √ 插入排序 O(n2) √ √
qsort排序的七种方法
很好的一个东西,希望大家踊跃下载,很好的
关于Qsort()问题!?急用!
在Compare()能不能传入字符串数组的下标,再根据不同的下标来提取相应的关键字进行比较呢?rn盼高手指点一二!
关于qsort的问题
[code=c]#include rn#include rn#include rnvoid qs(int* v,int left,int right,int (*cmp)(void *,void*));rnvoid swap(int* v,int i,int j);rnint compare(void *l, void *r);rnint main()rnrn srand(time(NULL));rn int* v=(int *)malloc(sizeof(int)*10);rn int i;rn printf("ok\n");rn for(i=0;i<10;i++)rn v[i]=rand()%10;rn printf("%d\n",v[i]);rn rn printf("ok\n");rn qs(v,0,10,compare);rn //qsort(v,10,sizeof(int),compare);rn for(i=0;i<10;i++)rn printf("\t%d\n",v[i]);rn rn free(v);rn return 0;rnrnvoid swap(int* v,int i,int j)rn int t;rn t=v[i];rn v[i]=v[j];rn v[j]=t;rnrnvoid qs(int* v,int left,int right,int (*cmp)(void *,void *))rn int last;rn if(left==right)rn return;rn rn int i;rn last=left;rn swap(v,left,(left+right)/2);rn for(i=left+1;i
C#字符串数组中排序的问题,求教
我想根据数组中字符串的日期和时间来排序。rn比如有个字符串数组:rnstring[] sArray = "label_a 2011/02/09 07:10:55",rn "label_b 2013/01/20 16:47:40",rn "label_c 2013/04/16 02:35:15",rn "label_d 2012/12/23 12:29:17";rnrn排序后可以根据时间先后来输出,不知可行么。。
关于qsort函数的问题
#includern#includern#includernint compare(const int *a,const int *b);rnint list[10]=12,32,42,51,8,16,51,21,19,9;rnvoid main()rn qsort(list,10,sizeof(list[6]),compare);rn for(int i=0;i<10;i++)rn cout<(b/10+b%10))rn return 1;rn else rn if((a/10+a%10)<(b/10+b%10))rn return -1;rn else return 0;rn帮帮忙帮我改下
关于快速排序的问题qsort
void qsort(int v[],int left,int right)rnrn int i,last;rn void swap(int v[],int i,int j);rn if (left>=right) return;rn swap(v,left,(left+right)/2); 问题1:为什么直接就交换left和(left+right)/2 ?rn last=left;rn for (i=left+1;i<=right;i++)rn if (v[i]
关于C++排序函数sort和qsort用法
用于C++中,对给定区间所有元素进行排序。 头文件是#include sort函数见下表: 函数名 功能描述 sort 对给定区间所有元素进行排序 stable_sort 对给定区间所有元素进行稳定排序 partial_sort 对给定区间所有元素部分排序 partial_sort_copy
关于qSort
[code=C/C++]rnstruct Lyricrnrn QTime time;rn QString lrc;rn;rnbool Lrc::aa()rnrn .....rn qSort(lyric.begin(),lyric.end(),lessTime);rn.....rnrnbool Lrc::lessTime(const Lyric &l1,const Lyric &l2)rnrn return l1.time::iterator,QList::iterator,)rn请问错在哪了
关于qsort
我们先说一下回调函数:函数指针是一种类型,他可以定义变量,可以作为函数形参。概念:通过函数指针调用的函数。把函数指针(地址)作为参数传递给另一个函数,当这个指针被用来调其所指向的函数时,我们就称之为回调函数通俗的说就是函数里面在满足一定条件的时候就调用参数里面的函数下面我们也说说qsort:功 能: 使用快速排序例程进行排序原型:void qsort( void *base, size_t num...
vector中如何用qsort进行排序
class Arnrn;rnvector AV;rn如何用qsort对AV进行排序rn谢谢
C/C++中排序的库函数sort和qsort
1.sort   必须添加头文件#include  sort属于标准模板库,只适用于c++,c语言不支持. #include #include using namespace std; int main() { int a[] = { 2, 5, 6, 4, 2, 3, 5, 8, 9, 6, 5, 4, 2, 3 }; sort(a, a + sizeof(a) /
一个用标准库函数qsort()排序问题
对浮点数组进行排序。从小到大排列。数组中元素为:rn32.1,456.87,332.67,442.0,98.12,451.79,340.12,54.55,99.87,72.5rn这是书上的习题,不难,但偶试了好久,没做出来rn附:标准库函数qsort()可对任何类型的数组排序。其头文件在stlib.h中。qsort()的rn原型为void qsort(void *,size_t nelem,size_t width,int(*fcmp)(const void*, const void*));rn
关于C#中字符串数组
我一直有一个问题想不通,比如:在C#中建立一个字符串数组,rnstring[] test = new string[100];rn然后对其一部分成员赋值:rnint i;rnfor (i=0;i<5;i++)rnrn test[i] = "abc";rnrn可是,若作判断rnif (test[5] == "")rnrn ......rnrn结果是从来执行不到if里面的语句的,好像test[5]不是等于""的,那到底test[5]等于什么呢?怎么判断呢?
C# 字符串数组 随机排序
例如:rn[code=csharp]rnfor(int i=0;i<20;i++)rnstring[] LastNameList =new string[] "张","王","李","刘","陈","杨","黄","孙","周","吴","徐","赵";rnLastNameList=LastNameList.OrderBy().ToArray();rnstring myLastName=LastNameList[i];rnrn[/code]rn我想要实现的功能是,每次循环时,myLastName的值是随机的。
将一个字符串数组排序
package com.mc.Demo;public class StringSort { public void sort(){ String[] strs={"avcd","bdce","avcdf","cced","bdce"}; for (int i = 0; i < strs.length; i++) {
利用c函数qsort排序
[code=&quot;java&quot;] #include #include //qsort函数 有四个参数 //1.代表排序数组的基址 //2.要排序数组的长度,也可以对这个数组的子序列进行排序 //3.数组元素的内存长度 //4.要进行比较的函数 int cmp(const void * a, const void *b) { return *(int *)a - *(int ...
C语言排序函数qsort( )
关于c语言排序的问题,以前我都是用冒泡排序或者快速排序,知道这几天,在杭电上面打ACM的时候,才发现又一种排序的函数,就是qsort();qsort()括号里面有4个参数 第一个参数是将要排序的数组名array; 第二个参数是将要排序的数量n; 第三个参数是每个要排序的参数的大小xizeof(array[o]); 第四个参数是自己写的一个比较函数cmp;前三个参数还是比较好搞的,但是最后一个
相关热词 c# 线程结束时执行 c# kb mb 图片 c# 替换第几位字符 c#项目决定成败 c# 与matlab c# xml缩进 c#传感器基础 c#操作wps c# md5使用方法 c# 引用父窗口的组件