精华内容
下载资源
问答
  • C++ 如何实现字典序排序法,自然排序类似PHP的natcasesort函数,整了一天没有头绪.数组是vector排序前:[0]=>IMG0.png[1]=>IMG3.png[2]=>img1.png[3]=>img10.png[4]=>img12.png[5]=>img2.png排序后:...

    C++ 如何实现字典序排序法,自然排序

    类似PHP的natcasesort函数,整了一天没有头绪.

    数组是vector

    排序前:

    [0] => IMG0.png

    [1] => IMG3.png

    [2] => img1.png

    [3] => img10.png

    [4] => img12.png

    [5] => img2.png

    排序后:

    [0] => IMG0.png

    [1] => img1.png

    [2] => img2.png

    [3] => IMG3.png

    [4] => img10.png

    [5] => img12.png

    ------解决方案--------------------

    其实楼主的意思就是按数字大小排序呗? 预处理的时候把数值部分摘出来作为排序的key。

    ------解决方案--------------------

    定位到数字部分,读取数字再比较?

    bool compare(const string& name1, const string& name2)

    {

    int num1, num2;

    sscanf(name1.c_str()+3, "%d", &num1);

    sscanf(name2.c_str()+3, "%d", &num2);

    return num1 

    }

    ------解决方案--------------------

    sort(vector.begin(),vector.end(),[](const string&a,const string&b){return a[3]<b[3];});泛型算法和lambda

    ------解决方案--------------------

    直接添加到容器,自动排序

    ------解决方案--------------------

    引用:Quote: 引用:定位到数字部分,读取数字再比较?

    bool compare(const string& name1, const string& name2)

    {

    int num1, num2;

    sscanf(name1.c_str()+3, "%d", &num1);

    sscanf(name2.c_str()+3, "%d", &num2);

    return num1 

    }

    这样就有点局域性了,不能确定后面一定是数字

    那你倒是说说具体的规则啊,对于你举的例子,以上那个比较规则应该是够了

    ------解决方案--------------------

    std::sort(files.begin(),files.end(), [](const std::string& a, const std::string& b)

    {

    return a.substr(3,std::string::npos)

    });

    ------解决方案--------------------

    简单的写了下 用的是qsort

    #include 

    #include 

    #include 

    char data[6][10]={{"img0"},

    {"img3"},

    {"img1"},

    {"img10"},

    {"img12"},

    {"img2"}};

    int cmp(const void *a, const void *b)

    {

    char *temp_a = (char *)a;

    char *temp_b = (char *)b;

    // 如果两个字符串的长度不相等那么就把少的放前面

    if(strlen(temp_a)!= strlen(temp_b))

    return strlen(temp_a)-strlen(temp_b);

    // 两字符串相等,就升序

    for(int i=0; i 

    {

    if(temp_a[i]!=temp_b[i])

    return temp_a[i]-temp_b[i];

    }

    }

    int main()

    {

    printf("排序前:\n");

    for(int i=0; i 

    printf("%s\n", data[i]);

    qsort(data, 6, 10*sizeof(char), cmp);

    printf("排序后:\n");

    for(int i=0; i 

    printf("%s\n", data[i]);

    return 0;

    }

    ------解决方案--------------------

    1702411991.png

    ------解决方案--------------------

    1702411992.png

    展开全文
  • 算法(C++字典序问题

    千次阅读 2020-02-02 15:37:49
    题目描述 在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A 由26 个小写英文字母组成A={a,b,…,z}。...现在对字母表A 产生的所有长度不超过6 的升序字符串按照字典序排列并编码如下。 1 2 … 2...

    题目描述

    在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A 由26 个小写英文字母组成A={a,b,…,z}。该字母表产生的升序字符串是指字符串中字母按照从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1 次。例如,a,b,ab,bc,xyz 等字符串都是升序字符串。现在对字母表A 产生的所有长度不超过6 的升序字符串按照字典序排列并编码如下。
    1 2 … 26 27 28 …
    a b … z ab ac …

    编程任务

    对于给定的长度不超过6 的升序字符串,编程计算出它在上述字典中的编码。

    数据输入:
    第一行是一个正整数k,表示接下来共有k 行接下来的k 行中,每行给出一个字符串。

    结果输出:
    共有k 行,每行对应于一个字符串的编码。

    输入示例
    2
    a
    b
    输出示例
    1
    2

    分析

    [代码

    #include <iostream>
    #include <cstring>
    
    using namespace std;
    
    int order(int i,int k){//第i个字母开头长度为k的数量
        int j;
        int sum = 0;
        if(k==1){
            return 1;
        }
        else{
            for(j = i+1;j<=26;j++){
                sum+=order(j,k-1);
            }
        }
        return sum;
    }
    int f(int k){//计算长度为k的总和
        int sum = 0;
        for(int i=1;i<=26;i++){
            sum += order(i,k);
        }
        return sum;
    }
    int transform(){
        char word[6];
        cin>>word;
        int len = strlen(word);
        int word_num[6];
        int num = 0;
        for(int i=0;i<len;i++){
            word_num[i]=word[i]-'a'+1;
        }
        for(int i = len-1;i>0;i--){//计算长度为1到len-1总和
            num += f(i);
        }
        for(int i = word_num[0]-1;i>=1;i--){//计算从a到首字母长度为len的总和
            num += order(i,len);
        }
        for(int i=1;i<=len;i++){
            for(int j=word_num[i]-1;j>word_num[i-1];j--){
                num += order(j,len-i);
            }
        }
        num++;
        return num;
    }
    int main()
    {
        int n;
        cin>>n;
        int result[100];
        for(int i=0;i<n;i++){
            result[i] = transform();
        }
        for(int i=0;i<n;i++){
            cout<<result[i]<<endl;
        }
    
        return 0;
    }
    
    
    展开全文
  • c++全排列的字典序

    2019-07-03 20:26:43
    背景: 7-3 输出全排列 (20 分) 请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n...排列的输出顺序为字典序 输入样例: 3 输出样例: 123 132 213 231 312 321 #include<c...

    背景:
    7-3 输出全排列 (20 分)
    请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间。
    输入格式:
    输入给出正整数n(<10)。
    输出格式:
    输出1到n的全排列。每种排列占一行,数字间无空格。排列的输出顺序为字典序
    输入样例:
    3
    输出样例:
    123
    132
    213
    231
    312
    321

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int maxn = 10;
    int a[10]={1,2,3,4,5,6,7,8,9};//定义1-9的全排列 
    int n;
    int b[10];//用来记录排列后的答案 
    bool f[10]={false};
    void perm(int a[],int i,int b[]){
    	int j,k;
    	if(i==n){//当i==n的长度时,代表已经完成了一次全排列 
    		for(k=0;k<n;k++)
    			cout<<b[k];//此时将b数组中的数进行输出 
    		cout<<endl;
    	}else{
    		for(j=0;j<n;j++){//遍历每一个数是否重复 
    			if(f[j]==false){
    				b[i]=a[j];//如果不重复就放进b数组中 
    				f[j]=true;
    				perm(a,i+1,b);//递归调用 
    				f[j]=false;//回溯法进行下一次试探 
    			}
    		}
    	}
    }
    int main()
    {
        cin>>n;
        perm(a,0,b);
        return 0;
    }
    
    
    展开全文
  • 在 C 语言中,我们可以使用 strcmp() 函数比较 char* 类型字符串的字典序。 当字符串 s1 的字典序小于字符串 s2 的字典序时,返回值 < 0。 当字符串 s2 的字典序大于字符串 s1 的字典序时,返回值 > 0。 当...

    strcmp(s1, s2)

    在 C 语言中,我们可以使用 strcmp() 函数比较 char* 类型字符串的字典序。

    • 当字符串 s1 的字典序小于字符串 s2 的字典序时,返回值 < 0。
    • 当字符串 s2 的字典序大于字符串 s1 的字典序时,返回值 > 0。
    • 当字符串 s1 的字典序等于字符串 s2 的字典序时,返回值 = 0。
    #include <iostream>
    using namespace std;
    
    int main() {
        char s1[2] = "a";
        char s2[2] = "b";
        cout << strcmp(s1, s2) << endl; //-1
        cout << strcmp(s2, s1) << endl; //1
        cout << strcmp(s1, s1) << endl; //0
        return 0;
    }
    

    s1.compare(s2)

    在 C++ 中,我们可以使用compare() 函数比较 char* 类型和 string 类型字符串的字典序。compare() 函数和 strcmp() 函数的返回值相同。

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
        string s1 = "a";
        string s2 = "b";
        cout << s1.compare(s2) << endl; //-1
        cout << s2.compare(s1) << endl; //1
        cout << s1.compare(s1) << endl; //0
        return 0;
    }
    

    <

    此外,在 C++ 中,我们还可以使用比较运算符比较 char* 类型和 string 类型字符串的字典序,注意使用比较运算符比较 char* 类型字符串时,需要将 char* 类型强制转换为 string 类型,否则比较的则是字符串的起始地址。

    #include <iostream>
    using namespace std;
    
    int main() {
        char s1[2] = "a";
        char s2[2] = "b";
        cout << (s1 < s2) << endl;  //0
        cout << &s1 << endl;        //00BDFE74
        cout << &s2 << endl;        //00BDFE68
        cout << (string(s1) < string(s2)) << endl;  //1
        cout << (string(s2) < string(s1)) << endl;  //0
        cout << (string(s1) == string(s1)) << endl; //1
        return 0;
    }
    
    展开全文
  • Count Sorted Vowel Strings(C++统计字典序元音字符串的数目)
  • c++ 排列和字典序全排列解析

    千次阅读 2018-04-27 19:58:27
    我们知道C++里自带的有全排列,...首先,对于全排列c++给出了两个函数,next_permutation 和 prev_permutation 顾名思义,next_permutaion是指按字典序排列的下一个升序排列,而prev_permutation 则是指上一个。st...
  • 之前见到过这个 C++ 里面强大的库函数...next_permutation是C++里面一个强大是用于字典序排序的函数 从小到大 是一个bool型的 若next后还有存在数据 返回true,否则返回false 测试: #include&lt;iostre...
  • 字典序问题(Python C++

    千次阅读 2020-02-18 14:28:09
    字典序问题:在数据加密和数据压缩中需要对特殊的字符串进行编码。给定的字母表由262626个小写字母组成。该字母表产生的升序字符串是指字符串中字母从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符...
  • C++实现全排列(字典序)

    千次阅读 2017-11-20 19:07:12
    以前都是写用复杂的逻辑语言...这个函数会自动生成下一个字典序的排序,对应的还有prev_permutation,生成上一个字典序排序,炒鸡的简单明了,省去一大堆复杂的循环~~; 代码如下: #include #include #include #inc
  • 字符字典序排序C++

    千次阅读 2018-05-31 15:31:39
    之前遇到字典序排序的问题,一时间没能想出来,之后想好后记录下来。 问题描述:给出一个字符串,是一个不是多个string,有大写有小写,排序结果为AaBbCcDd......之前一直不明白sort函数的自定义函数的工作原理,...
  • C++判断字符串字典序

    2021-04-28 17:01:34
    C++判断字符串结束位置 char s1[10001]; cin >> s1; if (s1[1] == '\0' || s1[1] == NULL || s1[1] == 0) { cout<<"这个位置字符为空"<<endl; } 当字符为空字符的时候,字符的ASCLL码为0 要...
  • 给定整数n和m, 将1到n的这n个整数按字典序排列之后, 求其中的第m个数。 对于n=11, m=4, 按字典序排列依次为1, 10, 11, 2, 3, 4, 5, 6, 7, 8, 9, 因此第4个数是2. #include<iostream> #include<algorithm>...
  • c\c++中字符串字典序比较函数的区别

    千次阅读 2020-03-04 18:58:37
    在c语言中: ...//比较两个字符串的字典序 if(strcmp(s1,s2)>0){ //则s1的字典序较大 } 在c++中 string s1; string s2; //比较两个字符串的字典序 if(s1.compare(s2)>0){ //s1的字典序大 } ...
  • C++ 字典排序

    2020-07-26 22:00:13
    字典序的定义 n个元素{1,2,…, n }有n!个不同的排列。将这n!个排列按字典序排列,并编号为0,1,…,n!- 1。每个排列的编号为其字典序值。例如,当n=3时,6 个不同排列的字典序值如下: 字典序值 0 1 2 3 4...
  • 1:算法思路 ①对数字串从后向前找第一个降序,记录位置Ai ...①求839674521的字典后序 ②从后向前扫描到第一个降序为4 ③再次从后扫描找到第一个比4大的数5 ④将4和5交换,并且最后三位逆序,得到839675124 ...
  • 在 C 语言中,我们可以使用 strcmp() 函数比较 char* 类型字符串的字典序。 当字符串 s1 的字典序小于字符串 s2 的字典序时,返回值 < 0。 当字符串 s2 的字典序大于字符串 s1 的字典序时,返回值 > 0。 当...
  • C++:字母按字典序的全排列

    千次阅读 2019-08-29 21:07:02
    要点:相比于普通的递归全排列,按字典排序的全排列需要用到排序函数(下面代码中的Sort函数),要为字符先排好(按ASCLL值),再进行递归排列。 普通的递归全排列(可与本文的代码比较来看):...
  • 字典序排数 题目 给定一个整数 n, 返回从 1 到 n 的字典顺序。 测试样例 给定 n =1 3,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] 。 请尽可能的优化算法的时间复杂度和空间复杂度。 输入的数据 n 小于等于 5,000,000...
  • 现在对字母表 A 产生的所有长度不超过 6 的升序字符串按照字典序排列并编码如下。 1 2 … 26 27 28 … a b … z ab ac … 对于任意长度不超过 6 的升序字符串,迅速计算出它在上述字典中的编码。 编程任务: 对于...
  • 在数据加密和数据压缩中常需要对特殊的字符串进行编码。...字符串按照字典序排列并编码如下。 1 2 … 26 27 28 … a b … z ab ac … 对于任意长度不超过6 的升序字符串,迅速计算出它在上述字典中的编码。
  • C/C++对等长单词进行字典序排序 只对等长字母排序: 思路: 代码: /* &amp;gt;Plan:对等长单词进行字典序排序; &amp;gt;Author:ADiiana &amp;gt;Time:2019/3/15 */ #include&amp;lt;iostream&...
  • #include <iostream> #include <string> #include<vector> #include<algorithm> using namespace std; template<typename T > void fun(T val) { cout <...= s.
  • 算法经典问题:字典序问题 //字典序问题,输入两个字符串,计算两个字符串之间有多少字符串 例:a b c ....z aa ab ac...az bb bc .. //a<b //aaaaaa0 //bbbaaa-1 //cout0-1 #include<iostream>...
  • 字母字典序问题 c++代码

    千次阅读 2013-08-23 15:06:23
    该字母表产生的长字符串是指定字符串中字母从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1次.例如,a,b,ab,bc,xyz,等字符串是升序字符串.现在对字母表A产生的所有长度不超过6的升序字符串...
  • 字典序 2009 普及组 C++

    2016-10-20 13:04:00
    转载于:https://www.cnblogs.com/pixiuart/p/5980458.html

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 880
精华内容 352
关键字:

c++字典序

c++ 订阅