0分 用例全对 求助!
查看原帖
0分 用例全对 求助!
387262
SGJSW楼主2024/9/28 16:59
#include <iostream>
#include <vector>
#include <cctype> // 包含 toupper 和 isalpha 函数

using namespace std;

bool flatten(vector<char>::iterator it, vector<char>::iterator begin, vector<char>::iterator end)
{
  if (it == begin || it == end - 1)
    return false; // 防止越界
  char prev = *(it - 1);
  char next = *(it + 1);

  if (*it == '-')
  {
    bool isPrevAlpha = isalpha(prev);
    bool isNextAlpha = isalpha(next);
    bool isPrevDigit = isdigit(prev);
    bool isNextDigit = isdigit(next);

    if ((isPrevAlpha && isNextAlpha) || (isPrevDigit && isNextDigit))
    {
      if (prev >= next)
        return false;
      else
        return true;
    }
  }
  return false;
}

void print(int a, int b, int c, vector<char>::iterator &it, vector<char>::iterator begin, vector<char>::iterator end)
{
  char x = *(it - 1);
  char y = *(it + 1); // a == 1

  if (a == 3)
  {
    int n = b * (y - x - 1);
    for (int i = 0; i < n; ++i)
      cout << '*';
  }

  else
  {
    if (isalpha(x) && a == 2)
    { // a == 2
      x = toupper(x);
      y = toupper(y);
    }

    if (c == 1)
    {
      for (int i = 1; i < (y - x); ++i)
      {
        int j = b;
        while (j--)
          cout << (char)(x + i);
      }
    }
    else
    {
      for (int i = 1; i < (y - x); ++i)
      {
        int j = b;
        while (j--)
          cout << (char)(y - i);
      }
    }
  }
  it++;
}

int main()
{
  int p1, p2, p3;
  cin >> p1 >> p2 >> p3;
  cin.ignore(); // 忽略之前的换行符

  vector<char> v;
  string input;
  getline(cin, input); // 一次性读取整行输入
  for (char ch : input)
  {
    v.push_back(ch);
  }

  for (auto it = v.begin(); it < v.end();)
  {
    if (!flatten(it, v.begin(), v.end()))
    {
      cout << *it;
      ++it; // 在这里增加迭代器
    }
    else
    {
      if (*(it + 1) == *(it - 1) + 1)
      {
        ++it; // 在这里增加迭代器
        cout << *it;
        ++it; // 再次增加迭代器
      }
      else
      {
        print(p1, p2, p3, it, v.begin(), v.end());
        // 在 print 函数内部已经增加了迭代器      }
      }
    }
    return 0;
  }
2024/9/28 16:59
加载中...