演示如何在c++; 我是用DCOME做这个练习的,我试着用C++解决这个问题。但我需要一点帮助。虽然我知道这应该很简单,但我似乎错过了一些东西

演示如何在c++; 我是用DCOME做这个练习的,我试着用C++解决这个问题。但我需要一点帮助。虽然我知道这应该很简单,但我似乎错过了一些东西,c++,sorting,alphabetical,C++,Sorting,Alphabetical,我有两个输入,第一个是后面的字母数,第二个是这些字母。我需要写一个代码,它将以字母顺序给出字母数组的输出 输入示例: 5 Z k a P b 我的代码应该输出a c D M,但它给出的是D M a c。std::sort()可以正常工作,但请注意,默认情况下,它按升序排列值,在ASCII中,大写字母出现在小写字母之前。为了解决这个问题,您可以给std::sort()一个执行不区分大小写比较的自定义比较器,例如: #包括 #包括 #包括这是为我工作的代码: #include <iostrea

我有两个输入,第一个是后面的字母数,第二个是这些字母。我需要写一个代码,它将以字母顺序给出字母数组的输出

输入示例:

5 Z k a P b 我的代码应该输出
a c D M
,但它给出的是
D M a c

std::sort()
可以正常工作,但请注意,默认情况下,它按升序排列值,在ASCII中,大写字母出现在小写字母之前。为了解决这个问题,您可以给
std::sort()
一个执行不区分大小写比较的自定义比较器,例如:

#包括
#包括

#包括

这是为我工作的代码:

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <cctype>

using namespace std;

//Compiler version g++ 6.3.0

char my_tolower(char ch)
{
    return static_cast<char>(tolower(static_cast<unsigned char>(ch)));
}

int main() {
    int n;
    cin >> n;
    char c;
    vector<char> vec;

    for (int i = 0; (i < n) && (cin >> c); ++i){
        vec.push_back(c);
    }

    sort(vec.begin(), vec.end(),
    [](char c1, char c2){ return my_tolower(c1) < my_tolower(c2); }
    );

    for (auto &&c : vec){
        cout << c << " ";
    }
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
//编译器版本g++6.3.0
char my_tolower(char ch)
{
返回静态施法(tolower(静态施法(ch));
}
int main(){
int n;
cin>>n;
字符c;
向量向量机;
对于(int i=0;(i>c);+i){
向量推回(c);
}
排序(vec.begin(),vec.end(),
[](字符c1,字符c2){返回my_-tolower(c1)cout,因为大写ASCII字符优先于小写字符排序。请查看ASCII字符集-您需要实现一个自定义排序方法,该方法在转换为小写(或大写)字符后执行字符比较是否所有小写字母都应该在所有大写字母之前?FWIW您可以去掉
my_tolower
,只使用
[](无符号字符c1,无符号字符c2){返回tolower(c1)
@NathanOliver我最初考虑过这个问题,但我不确定返回值是否能够正确比较,而不会首先被转换回
char
这个转换完全不需要。它不会影响比较。
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>

using namespace std;

//Compiler version g++ 6.3.0

int main() {
    int n;
    cin >> n;
    char s;
    vector<char> vec;

    while (cin >> s){
        vec.push_back(s);
    }

    sort(vec.begin(), vec.end());

    for (int i = 0; i <= vec.size(); i++){
        cout << vec[i] << " " ;
    }
}
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <cctype>

using namespace std;

//Compiler version g++ 6.3.0

char my_tolower(char ch)
{
    return static_cast<char>(tolower(static_cast<unsigned char>(ch)));
}

int main() {
    int n;
    cin >> n;
    char c;
    vector<char> vec;

    for (int i = 0; (i < n) && (cin >> c); ++i){
        vec.push_back(c);
    }

    sort(vec.begin(), vec.end(),
    [](char c1, char c2){ return my_tolower(c1) < my_tolower(c2); }
    );

    for (auto &&c : vec){
        cout << c << " ";
    }
}