我正在尝试从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/