Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 按字符串向量排序大小写单词_C++_Sorting_Alphabetical - Fatal编程技术网

C++ 按字符串向量排序大小写单词

C++ 按字符串向量排序大小写单词,c++,sorting,alphabetical,C++,Sorting,Alphabetical,我试图用字符串向量对单词进行字母排序,我的程序区分大写字母和小写字母,所以大写字母总是出现在排序列表的第一位。我可以想出一些可能非常麻烦的方法来确保大写字母的位置,但是有没有简单的方法来做到这一点 这是我的密码: for (int i = 0; i < str.size(); i++) { for (int j = 0; j < str.size(); j++) { if (str.at(i) > str.at(

我试图用字符串向量对单词进行字母排序,我的程序区分大写字母和小写字母,所以大写字母总是出现在排序列表的第一位。我可以想出一些可能非常麻烦的方法来确保大写字母的位置,但是有没有简单的方法来做到这一点

这是我的密码:

for (int i = 0; i < str.size(); i++)
    {
        for (int j = 0; j < str.size(); j++) 
        {
            if (str.at(i) > str.at(j))
            {               
                temp = str.at(j);
                str.at(j) = str.at(i);
                str.at(i) = temp;
            }   
        }
    }
for(int i=0;istr.at(j))
{               
温度=str.at(j);
str.at(j)=str.at(i);
str.at(i)=温度;
}   
}
}

也是,这是一个编程任务,所以我不允许使用内置的C++函数来完成这个任务,我必须使用一个向量。p> 如果您有

字符串的
向量
,那么您可以/应该使用STL库,它为给定的比较函数(可以是简单的lambda表达式、函子、函数等)提供
排序
稳定排序

更新:不允许使用除vector之外的内置类型。 在这种情况下,您可以轻松开发STL功能的复制品


定义一个接收比较器(字符串向量)的排序函数。

解决这个问题的诀窍是为这一行写一个替换项

if (str.at(i) > str.at(j))
它执行不区分大小写的比较。首先写一个签名:

bool greaterThanIgnoreCase(const string& left, const string& right) {
    ...
}
现在,您可以通过调用此新函数来替换
if
条件:

if (greaterThanIgnoreCase(str.at(i), str.at(j)))

最后,您需要提供
greaterThanIgnoreCase
函数的实现。这是问题的核心,所以你需要自己去做。它的诀窍是对字符串
left
right
的每个字符使用or函数,并一次比较一个字符。如果其中一个字符串中的字符已用完,则应认为剩余一些字符的字符串更大

您唯一需要做的就是比较小写字符。如果不允许使用任何内置函数,可以手动执行

由于小写字符从97开始位于ASCII表中,大写字符从65开始位于ASCII表中,因此您只需将32添加到大写字符中,即可获得其等效的小写字符

char lowerCase(char c)
{
    if (c >= 'A' && c <= 'Z') // if char is uppercase
        return (char)(c + 32); // return its lowercase equivalent
    else
        return c;
}
请注意,只有在比较时才应使用
小写
,而在分配时则不应使用


<>这里是.< /p>是否可以接受<代码> STD::SoTo()/C++ >自定义大于函数???:“我不允许使用内置的C++函数”问题,抱歉,我没有看到。
if (lowerCase(str.at(i)) > lowerCase(str.at(j)))