Excel中单元格的坐标

时间:2015-07-19 20:20:53

标签: c excel

我正在尝试从Excel,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个字符。如果有一个char,那没关系。如果有更多的字符,我不知道如何解决。

一些例子:

A5
 => [5,0]

Z8
 => [8,25]

AAA2345

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


AC23
 => [23,28]

NBFA349
 => [349,247572]

3 个答案:

答案 0 :(得分:2)

这些字母组合实际上是base-26,但是数字不是0到25,而是1到26(并且由A到Z的字母表示)。所以你可以从字符串的末尾移动到开头,将数字乘以{str[i]-'A'+1,其中str[i]是字符串str的第i个字符,我从{{1}运行0)到相应的26的力量。就像那样:

strlen(str)

您必须从右向左移动,因为例如,数字28写为int c = 1, s = 0; for(int i = strlen(str)-1; i>=0; i--) { s += (str[i]-'A'+1)*c; c*=26; } (而不是AB

答案 1 :(得分:0)

以下内容可能有所帮助。它定义了一个函数,它返回一个字符串的列号,如&#34; ADX&#34;。如果您在Excel电子表格中的该列的单元格中输入函数=Column(),它将与您将看到的内容一致:

#include <stdio.h>
#include <string.h>

long col_num(char* col);

int main(void){
    char test1[] = "Z";
    char test2[] = "AA";
    char test3[] = "BZA";
    printf("Column %s is column number %ld\n",test1,col_num(test1));
    printf("Column %s is column number %ld\n",test2,col_num(test2));
    printf("Column %s is column number %ld\n",test3,col_num(test3));
    return 0;
}

long col_num(char* col){
    long sum, i, n, p, val;
    char letter;
    n = strlen(col);
    sum = 0;
    p = 1;
    for(i = n-1; i >= 0; i--){
        letter = col[i]; 
        val = letter - 'A' + 1;
        sum += p*val;
        p *= 26;
    }
    return sum;
}
我差点忘了。输出:

Column Z is column number 26
Column AA is column number 27
Column BZA is column number 2029

答案 2 :(得分:-1)

//"A" => 1, "Z" -> 26, "AAA" => 703, "NBFA" => 247573
int colToNum (const char *s){
    int n = 0;
    for(int i = 0; s[i] ; ++i)
        n = n * 26  + (s[i] - 'A' + 1);
    return n;//To zero origin : return n-1;
}