C++ 使用排序函数c+对字符数组进行排序+;

C++ 使用排序函数c+对字符数组进行排序+;,c++,arrays,string,templates,char,C++,Arrays,String,Templates,Char,我试图将用户输入限制为字母表,然后按升序对所有字符进行排序 生成消息 错误:调用“std::uu cxx11::basic_string::basic_string(char&)”时没有匹配的函数 这是我的头球 #include <iostream> #include <string.h> #include <conio.h> #include <stdio.h> #include <regex> 获取此2行错误 int mlengt

我试图将用户输入限制为字母表,然后按升序对所有字符进行排序

生成消息 错误:调用“std::uu cxx11::basic_string::basic_string(char&)”时没有匹配的函数

这是我的头球

#include <iostream>
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include <regex>
获取此2行错误

int mlength = 100;
int main() {
    char str[mlength];
    int length;

    cout << "Please enter a c-string: ";
    cin.getline(str,mlength,'\n');
    regex pass1("^[a-zA-Z]+");
    while(!regex_match(str,pass1)) {
         cout<<"Error"<<endl;
         cout << "Please enter a c-string: ";
         cin.getline(str,mlength,'\n');
    }
    string Sortstr (str);
    sort(str, str + strlen(str));
}
int mlength=100;
int main(){
字符str[mlength];
整数长度;

不能为什么不直接排序
str

sort(str, str + strlen(str));
没有理由不能直接对数组进行排序。只需将指向数组第一个元素的指针和超出数组末尾元素的指针传递给
排序
。在这种情况下,添加
strlen
将获得指向数组有效结尾的指针。

在这一行中

string Sortstr (str[mlength]);
您正在字符数组上使用索引运算符,该数组将为您提供一个字符。因此,您将向字符串构造函数传递一个字符。此构造函数不存在,因此会出现错误。即使它存在,您也不希望传递一个字符,而是要传递整个字符数组

你想要的是:

string Sortstr (str);

<代码>字符串Sortstr(STR[ McLe]);< /COD>是未定义的行为,因为索引数组超出界限,更不用说,它是非标准C++使用可变长度数组)(<代码> MLime< /Cord>不是<代码> CONTXPRP< /代码>)。为什么要使用
char
数组开始,而不是
std::string
string Sortstr(str[mllength]);
==>
string Sortstr(str)你在使用C++中的非标准VLAs。避免使用C++,使用“<代码> STD::String 和<代码> STD::GETLION<代码>。也不一定是C++的一部分,虽然有些编译器将它作为非可移植的扩展。我的想法是将用户输入排序为升序,例如BCDA/DCBA/CDBA,然后进入ABCD。rt我的排列(把它排列成所有可能的组合),输出总是从一开始排序-Z@Someprogrammerdude谢谢,现已修复,我没有仔细查看原始代码。将排序(Sortstr.begin(),Sortstr.end())更改为排序(str,str+strlen(str));该函数将ACbdD排序为ACDbd而不是AbdCD,为什么小写字母不在前面?如果所有输入都相同,则可以正常工作uppercase@qing因为这是您正在使用的字符集定义的顺序。如果您想要不同的顺序,您必须编写一个比较函数,该函数给出您想要的顺序并传递它作为
std::sort
string Sortstr (str);