c++ - 什么是 CStringArray 或 CSortStringArray。那么如何将这个数组按顺序排列呢?

标签 c++ visual-studio-2013 mfc

问题是如果我只使用CStringArray而不是CSortStringArray,如何排列顺序第一个数组sortarray的排列是从(a到m)按顺序排列。但如果我使用CSortStringArray,排列仍然是相同的。第二个数组 sortarray1 从 1.txt 到 15.txt 的顺序总是错误的,无论是使用 CStringArray 还是 CSortStringArray?

void CtestmfcDlg::OnBnClickedOk()
    {
        CSortStringArray sortArray;
        sortArray.Add(CString("a"));
        sortArray.Add(CString("b"));
        sortArray.Add(CString("c"));
        sortArray.Add(CString("d"));
        sortArray.Add(CString("e"));
        sortArray.Add(CString("f"));
        sortArray.Add(CString("g"));
        sortArray.Add(CString("h"));
        sortArray.Add(CString("i"));
        sortArray.Add(CString("j"));
        sortArray.Add(CString("k"));
        sortArray.Add(CString("l"));
        sortArray.Add(CString("m"));

        CSortStringArray sortArray1;

        sortArray1.Add(CString("1.txt"));
        sortArray1.Add(CString("2.txt"));
        sortArray1.Add(CString("3.txt"));
        sortArray1.Add(CString("4.txt"));
        sortArray1.Add(CString("5.txt"));
        sortArray1.Add(CString("6.txt"));
        sortArray1.Add(CString("7.txt"));
        sortArray1.Add(CString("8.txt"));
        sortArray1.Add(CString("9.txt"));
        sortArray1.Add(CString("10.txt"));
        sortArray1.Add(CString("11.txt"));
        sortArray1.Add(CString("12.txt"));
        sortArray1.Add(CString("13.txt"));
        sortArray1.Add(CString("14.txt"));
        sortArray1.Add(CString("15.txt"));



        for (int i = 0; i <= sortArray.GetUpperBound(); i++)
            {
                testbox1.AddString(sortArray[i]);
            }
            //sortArray.Sort();

            for (int j = 0; j <= sortArray1.GetUpperBound(); j++)
            {
                testbox2.AddString(sortArray1[j]);
            }

   }

最佳答案

如果最低系统要求是 Vista 或更高,那么您可以使用 CompareStringEx

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include "windows.h"

using namespace std;

int wmain()
{
    vector<wstring> sa;
    wchar_t temp[50];
    for (int i = 12; i > 0; i--)
    {
        wsprintf(temp, L"%d.txt", i);
        sa.push_back(temp);
    }

    struct {
        bool operator()(const wstring &a, const wstring &b) {
            return CompareStringEx(0, SORT_DIGITSASNUMBERS,
                a.c_str(), a.length(), b.c_str(), b.length(), 0, 0, 0) == CSTR_LESS_THAN;
        }
    } mysort;
    sort(sa.begin(), sa.end(), mysort);

    for (size_t i = 0, count = sa.size(); i < count; i++)
        wcout << sa[i] << endl;

    return 0;
}

输出:

1.txt
2.txt
3.txt
...
9.txt
10.txt
11.txt
12.txt

关于c++ - 什么是 CStringArray 或 CSortStringArray。那么如何将这个数组按顺序排列呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29887972/

相关文章:

c++ - 是否可以从随后被破坏的字符串中本地保存数据而不将其移动到其他地方?

jquery - 如何使用ajax将json字符串发送到 Controller 方法?

c++ - 如何将静态控件背景设置为对话框背景?

c++ - Makefile 中 $(objs) : %. o : %. cpp 和 $(objs) : $(objs:. o=.cpp) 之间有什么区别

c++ - 代码不会超出输入阶段

visual-studio - 在 Visual Studios Code 2015 中自动构建 TypeScript 项目

c++ - mfc中对话框之间的传值

c++ - 对 MFC 项目中的内存泄漏感到困惑,如果从未调用 _CrtDumpMemoryLeaks(),这些内存泄漏就会消失

c++ - 如何理解复杂的数组声明指针,以及 &

c++ - Visual Studio 2013 VC++ 编译器