按长度排序字符串数组
Merge Sort string array by length
我正试图对从.txt中读取的一组非常大的字符串进行排序并对它们进行排序。到目前为止,我可能能够按字母顺序对它们进行排序,但我不知道如何先按长度排序,然后再按字母顺序排序。这是我的代码到目前为止,希望有人能对它有所启发。谢谢!
int lower = 0;
int upper = sizeof(dataSetForSort) - 1;
int middle = (lower + upper)/2;
string Temp[sizeof(dataSetForSort)];
int i = lower, j = middle + 1 , k = lower;
while(i <= middle && j <= upper)
{
if( dataSetForSort[i] < dataSetForSort[j] )
{
Temp[k].assign(dataSetForSort[i]);
i++;
}
else
{
Temp[k].assign(dataSetForSort[j]);
j++;
}
k++;
}
if(i > middle )
{
for(int h = j ;h <= upper ; h++ )
{
Temp[k].assign(dataSetForSort[h]);
k++;
}
}
else
for(int h = i; h<= middle ; h++ )
{
Temp[k].assign(dataSetForSort[h]);
k++;
}
for(int i = lower; i <= upper ; i++)
{
dataSetForSort[i].assign(Temp[i]);
}
在您的比较中,您可以更改为以下内容以便首先按长度排序,如果长度相等,则按字母顺序排序:
if( dataSetForSort[i].size() < dataSetForSort[j].size() ||
(dataSetForSort[i].size() == dataSetForSort[j].size() &&
dataSetForSort[i] < dataSetForSort[j]) )
您需要定义一个lessthan
函数来返回正确的比较。
bool lessthan( const std::string & left_hand_side, const std::string & right_hand_side )
{
// sort by length
if( left_hand_side.length() < right_hand_side.length() ) return true;
if( left_hand_side.length() > right_hand_side.length() ) return false;
// sort by alphabet
if( left_hand_side < right_hand_side ) return true;
if( left_hand_side > right_hand_side ) return false;
return false;
}
这个可以被std::sort使用,或者根据你的需求做成一个操作符
相关文章:
- 将C#字符串数组传递给C++
- 如何为 C 型字符串数组编写 getter 和 setter?
- 有没有办法使用 strcpy 将字符串数组复制到另一个字符串或其他数组中?
- 尝试将 c 字符串数组与分隔符连接起来
- 将字符串数组传递给接受常量字符**的函数
- 返回 C++ 中的字符串数组
- 如何从COM模块中的函数返回字符串数组?
- 无法将字符串数组声明为类成员而不是字符 (C++)
- 删除字符串数组
- 如何将字符串数组返回到 java JNI
- 将字符串数组作为函数参数传递
- C++将字符串数组的元素存储到变量中
- 循环访问还包含未使用元素的字符串数组
- 字符串数组上的 sizeof 运算符以 C++ 为单位给出不同的输出
- 乘以字符串/数组和全局数组
- 递归二进制搜索与字符串数组
- 如何初始化一个标准::字符串数组?
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- C++字符串数组的动态向量
- 给定一个等长字符串数组