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)))