如何在 C++ 中增加“z”之外的字母组合?

2024-01-23

我正在处理 Excel 电子表格,并且必须仅使用一种类型的公式来处理大量数据。由于在公式中唯一必要的更改涉及字母,我想知道是否有一种方法可以制作一个程序,按照 Excel 列顺序(A、B、C...Z;AA、AB、AC... AZ;BA、BB、BC...BZ)。

就我而言,我需要每次将字母增加 5 个,因此这是我试图获取的代码:

#include <iostream>

using namespace std;

int main() {

 char x = 'B';
 char y = 'E';
 for (int z = 1; z < 2255; z++) {
   cout << "=SUMPRODUCT(SUBTOTAL(4,OFFSET(" << x << "1:" << y << "1,ROW(" << x << "1:" << x << "100)-ROW(" << x << "1),)))" << endl;
   x = x + 5;
   y= y + 5;
  }
  return 0;
}

当然它不会工作,因为它超过了“z”,但是仍然有办法做到这一点吗?


一般解决方案描述

解决方案一:创建 base-26 系统本身:

假设您有 26 个字母。首先我们来制作 26 进制。我们对每个数字使用 1 个字节。我们创建一个数字数组,然后当相加超过 26 时有时需要进行调整。

假设你当前的数字是25。我们添加7,然后我们需要处理溢出,假设最大256(1字节),我们的数字限制是26。因此调整将是256-26=230。 (我们在短(16 位)上进行此计算,因此我们在26+7=33 -> 33+230=263。因此,高字节将为 1,低字节将为 7。)

计算出溢出阈值(高于 1)后,我们可以将其添加到下一个数字,并在发生溢出时执行相同的操作。

最后,为了显示,我们只需向两个字节中的每一个添加 65 ('A')。我们的最后一个字节将以 '\0' 空终止,因此我们可以将其转换为字符串。

解决方案2执行所有计算,然后将其转换为 26 基数:

在这种情况下,

number/26 = x

and

remainder r1 = (number%26)

我们将 r1 存储到一个字节中。

x/26 = x1

and

remainder r2 = (x%26)

我们将 r2 存储到下一个字节。

x1/26 = x2

and

remainder r3 = (x%26)

我们将 r3 存储到下一个字节。我们得到一个字符串r3 r2 r1 '\0'然后为每个字节添加 65 个“A”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C++ 中增加“z”之外的字母组合? 的相关文章