21xrx.com
2024-12-22 23:33:42 Sunday
登录
文章检索 我的文章 写文章
C++ 求第二大和第二小字符
2023-07-11 20:28:23 深夜i     --     --
C++ 第二大 第二小 字符

在学习编程语言时,了解如何找到第二大和第二小字符是非常有用的。在 C++ 中,有几种方法可以达到这个目的。本文将讨论其中两种方法。

第一种方法是使用两个变量来存储当前最大和第二大的字符,以及当前最小和第二小的字符。我们可以遍历整个字符串,比较每个字符和这四个变量的大小关系,并相应地更新它们。最后,我们将输出第二大和第二小的字符。以下是代码示例:


#include <iostream>

#include <string>

using namespace std;

int main() {

  string s = "abccdefff";

  char max1 = '\0', max2 = '\0', min1 = s[0], min2 = '\0';

  for (int i = 0; i < s.length(); i++) {

    if (s[i] > max1) {

      max2 = max1;

      max1 = s[i];

    } else if (s[i] > max2 && s[i] != max1) {

      max2 = s[i];

    }

    if (s[i] < min1) {

      min2 = min1;

      min1 = s[i];

    } else if (s[i] < min2 && s[i] != min1) {

      min2 = s[i];

    }

  }

  cout << "Second largest character: " << max2 << endl;

  cout << "Second smallest character: " << min2 << endl;

  return 0;

}

以上代码首先将第一个字符设为最小字符。然后,我们遍历字符串,将每个字符与当前最大和第二大,以及最小和第二小的字符进行比较。最后,我们输出第二大和第二小的字符。

第二种方法是使用 STL 的 multiset 容器。multiset 容器是一个自动排序的容器,可以存储重复的元素。我们可以将字符串中的所有字符插入到 multiset 容器中,然后直接访问第二大和第二小元素。以下是代码示例:


#include <iostream>

#include <string>

#include <set>

using namespace std;

int main() {

  string s = "abccdefff";

  multiset<char> ms;

  for (int i = 0; i < s.length(); i++) {

    ms.insert(s[i]);

  }

  auto it = ms.begin();

  advance(it, 1);

  cout << "Second smallest character: " << *it << endl;

  it = ms.end();

  advance(it, -2);

  cout << "Second largest character: " << *it << endl;

  return 0;

}

以上代码创建了一个 multiset 容器,将字符串中的每个字符都插入其中。我们可以使用 advance 函数移动迭代器来访问第二大和第二小元素。

这两种方法都能够找到第二大和第二小的字符。使用哪一种方法需要根据实际情况进行选择,但都可以为我们提供实现该功能的有用工具。

  
  

评论区

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