关于在C++中对字符串进行排序
About Sorting String In C++
如何仅根据每个单词的长度在字符串中对单词进行稳定的排序,以便最长的单词排在最前面,最短的单词排在最后(但相同长度的单词保持其相对于彼此的原始顺序)?
例如:输入:
sj a sa df r e w f d s a v c x z sd fd
结果输出:
sj sa df sd fd a r e w f d s a v c x z
最简单的解决方案是将字符串拆分为字符串集合,然后对该集合进行排序并将结果再次连接成字符串: 您可以使用字符串大小的自定义比较器,并将其与字符串集合一起馈送到std::stable_sort
以进行排序:
// Your original string
std::string your_string = "sj a sa df r e w f d s a v c x z sd fd";
// Split the string
std::istringstream iss(your_string);
std::vector<std::string> words{
std::istream_iterator<std::string>(iss),
std::istream_iterator<std::string>()
};
// Stable sort by size
std::stable_sort(std::begin(words), std::end(words), [](const std::string& lhs, const std::string& rhs) {
return lhs.size() > rhs.size();
});
// Merge the results back with spaces
std::ostringstream oss;
std::copy(
std::begin(words), std::end(words),
std::ostream_iterator<std::string>(oss, " ")
);
your_string = oss.str();
当然,这个算法不是最优的。为了避免大量的计算,您可以直接存储一个字符串向量并使用它,而不是将单词存储在空格分隔的字符串中。在次优事物中:我们从原始字符串中复制许多东西,而有些东西可能会在words
向量中移入和移出(不确定)。我们剥离空间以重新添加它们这一事实清楚地暗示了我们正在做的比我们能做的更多。
另外,请注意,最后一个字符串将有一个额外的尾随空格,您可以选择使用 pop_back
删除该空格。
相关文章:
- 对字符串进行排序时,在c++中处理sort()
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 按字母顺序对字符串中的字母进行排序,而无需使用内置的 sort()
- 字符串上的合并排序上的 Seg 错误
- 将图形表示为unordered_map<字符串、向量>时拓扑排序错误<string>
- 如何在数组 c++ 中对字符串进行排序
- 提高从排序字符串中获取字母顺序的顺序复杂性
- 尝试使用C++中的模板进行BST排序,但在使用随机字符串进行测试时不起作用
- 如何根据第二列/第三列等对字符串向量进行排序?
- 如何对向量进行排序<浮点数,字符串>而不考虑字符串
- C ++中的字符串排序,也没有在第5个元素正确排序
- C++:使用 LSD 基数排序字符串排序崩溃
- C 样式的字符串排序与排序和 qsort
- 自定义字符串排序
- 编号和字符串排序Al
- 使用STL对子字符串排序
- 如何在c++中按字母顺序对标准输入字符串排序
- c++向量字符串排序不工作
- SQLite 的不区分大小写的 UTF-8 字符串排序规则 (C/C++)