如何检查字符串数组是否已排序

时间:2018-12-16 07:31:09

标签: c++ c++14

如何检查字符串类型数组中的给定元素是否已排序。如果是整数类型,则比较会很容易。我看不到如何与单词进行比较。

4 个答案:

答案 0 :(得分:2)

就像基本类型一样,

std::string对象可以与the usual operators比较。

您可以手动编写循环,也可以只使用标准的库算法std::is_sorted

std::string Str[3] = { "ali", "zedan", "kali" };

bool result = std::is_sorted(Str, Str + 3);

// or using iterators

bool result = std::is_sorted(std::begin(Str), std::end(Str));

答案 1 :(得分:1)

只需使用适当的算法即可。

如果您的“字符串”类型为std::string,请使用默认的比较运算符:

std::is_sorted(std::begin(my_string_array), std::end(my_string_array);

如果您的“字符串”类型是C风格的字符串,则必须提供比较功能:

std::is_sorted(std::begin(my_string_array), std::end(my_string_array,
    [](const char* lhs, const char* rhs) {
        return std::strcmp(lhs, rhs) < 0;
    }
);

答案 2 :(得分:0)

以完全相同的方式。 想一想字典。单词“苹果”将出现在词典中的单词“房屋”之前。这称为词典顺序。

如果s1按照词典顺序在s2之前出现,则

字符串s1小于字符串s2 s1 < s2

通常的比较运算符适用于字符串,就像它们适用于整数一样

答案 3 :(得分:0)

除了std::string功能之外,您还可以比较字符,就像比较 integers 一样。首先,请检查下面的ASCII表;

ASCII TABLE

如您所见,每个字符都有一些相应的十进制数字,并且它们按字母顺序编号(a = 97,b = 98,c = 99 ...)将它们与整数进行比较。 但是请注意,大​​写和小写字母具有不同的对应小数位。因此,当您在字符串中进行比较以检查字符串是否已排序时,请首先将所有字符四舍五入到字符串的较低位置,因为大写字母对应的十进制数字比小写字母少得多。 ASCII表。因此,您的功能应如下所示:

bool is_string_sorted(std::string str){

    for(int i = 0; i < str.size() - 1; i++){

        str[i] = tolower(str[i]);
        str[i+1] = tolower(str[i+1]);

        if(str[i] > str[i+1]){

            return false;

        }


    }

    return true;
}