我正在尝试从A5,AC8,AAA8和DADFAF145之类的Excel单元格编号中获取坐标。

我这样阅读用户的输入:

while( ( c = getchar() ) != EOF )


在周期我有一个条件

if( c >= 48 && c <= 57 )
    {
      ungetc( c, stdin );
      scanf( "%d\n", &column ); }


它检查c是否为数字0-9,将c返回到缓冲区并读取该数字。数字是y坐标。

我的问题是我不知道如何从字符中获取X坐标。我不知道算法。

索引A = 0,Z = 25,共26个字符。如果有一个字符,没关系。我不知道如何解决是否还有更多字符。

一些例子:

A5
 => [5,0]

Z8
 => [8,25]

AAA2345

 => [2345,702](26 + 26 * 26)
PA12
 => [12,416](26 + 15 * 26)


AC23
 => [23,28]

NBFA349
 => [349,247572]

最佳答案

这些字母组合实际上以26为底,但是数字不是从0到25,而是从1到26(并且由A到Z的字母表示)。因此,您可以从字符串的末尾移至开头,将数字(str[i]-'A'+1,其中str[i]是字符串str的第i个字符,我从strlen(str)到0)相乘26的幂。类似:

int c = 1, s = 0;
for(int i = strlen(str)-1; i>=0; i--) {
    s += (str[i]-'A'+1)*c; c*=26;
}


您必须从右向左移动,因为例如28号写为AB(而不是BA

关于c - Excel中单元格的坐标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31505554/

10-16 11:27