21xrx.com
2024-05-20 14:05:51 Monday
登录
文章检索 我的文章 写文章
C++字符串排序
2023-07-14 17:09:23 深夜i     --     --
C++ 字符串 排序

在C++中,对字符串进行排序可以通过多种方式实现。在本文中,我们将介绍如何使用函数库和算法来完成字符串排序。

首先,让我们看看如何使用STL(标准模板库)来排序字符串。在C++中,字符串通常使用std::string类型表示。对于一个字符串向量,我们可以使用std::sort函数进行排序。以下是一个简单示例:


#include <iostream>

#include <algorithm>

#include <vector>

#include <string>

int main()

{

  std::vector<std::string> words {"Hello", "World", "C++", "Programming"};

  std::sort(words.begin(), words.end());

  for (const auto& word: words)

    std::cout << word << " ";

  std::cout << '\n';

  return 0;

}

输出结果:


C++ Hello Programming World

在上面的例子中,我们定义了一个向量words并存入了四个字符串,然后直接调用std::sort对其进行排序。由于排序会改变原始向量,因此应该使用const auto&或auto&&等引用来迭代元素。

当然,如果你需要针对特定的排序方式进行自定义排序,可以使用std::sort的第三个参数——比较函数或lambda表达式,例如:


#include <iostream>

#include <algorithm>

#include <vector>

#include <string>

int main()

{

  std::vector<std::string> words {"Hello", "World", "C++", "Programming"};

  auto cmp = [](const std::string& a, const std::string& b){

    return a.size() < b.size();

  };

  std::sort(words.begin(), words.end(), cmp);

  for (const auto& word: words)

    std::cout << word << " ";

  std::cout << '\n';

  return 0;

}

输出结果:


C++ Hello World Programming

在这个例子中,我们定义了一个lambda表达式来比较字符串长度大小,然后将其作为第三个参数传递给std::sort函数,从而实现按长度从小到大排序。

除了STL之外,我们还可以使用快排(QuickSort)和归并排序(MergeSort)等经典算法来对字符串进行排序。以下是一个归并排序的简单示例代码:


#include <iostream>

#include <vector>

#include <string>

std::vector<std::string> mergeSort(std::vector<std::string>& words)

{

  if (words.size() <= 1)

    return words;

  int mid = words.size() / 2;

  std::vector<std::string> left(words.begin(), words.begin() + mid);

  std::vector<std::string> right(words.begin() + mid, words.end());

  left = mergeSort(left);

  right = mergeSort(right);

  std::vector<std::string> merged;

  int i = 0, j = 0;

  while (i < left.size() && j < right.size())

  {

    if (left[i] < right[j])

      merged.push_back(left[i++]);

    else

      merged.push_back(right[j++]);

  }

  while (i < left.size())

    merged.push_back(left[i++]);

  while (j < right.size())

    merged.push_back(right[j++]);

  return merged;

}

int main()

{

  std::vector<std::string> words {"Hello", "World", "C++", "Programming"};

  words = mergeSort(words);

  for (const auto& word: words)

    std::cout << word << " ";

  std::cout << '\n';

  return 0;

}

输出结果:


C++ Hello Programming World

在上面的例子中,我们使用了递归和归并的思想来对字符串向量进行排序。虽然这种方式更加复杂,但是可以很好地应用于其他类型的序列排序。

总结来说,C++中字符串排序可以通过STL和算法两种方式来完成。对于特定的排序需求,可以使用STL的比较函数或lambda表达式来实现自定义排序。如果想深入了解相关算法的原理和实现,可以参考计算机算法基础课程或专门的算法书籍。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复