将R1C1格式转换为A1格式

时间:2015-04-16 13:26:36

标签: c

在excel电子表格中,我们将每个单元格的行和列表示为R1C1格式或A1格式。

R1C1格式表示行号和列号。例如,R23C55表示第23行和第55列。

在A1格式中,每列都有一个基于字母permutatons的代码。考虑前26列,每列分别从A到Z命名。下一列(即第27列)将是AA,AB,AC等。例如,BC23表示第BC列,第55行,第23行,第23行。

我需要将R1C1格式的输入转换为A1格式的输出。例如,R23C55将是BC23,其中BC是55的相应输出。

我已经制作了一个代码,用于将给定的列号转换为A1格式。

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

int main()
{
    int column,temp,i=0;
    char col[5];

    scanf("%d",&column);
    temp=column;

    while(temp!=0)
    {
        if(temp%26==0)
            {
                col[i]='Z';
                i++;
        }
        else
        {
            col[i]=(temp%26)-1+'A';
            i++;
        }
        temp=(temp-1)/26;
    }
    col[i]='\0';
    strrev(col);
    puts(col);

    return 0;
}

我可以将输入数字55转换为其输出BC。但我无法继续使用将R23C55转换为BC23的代码。如何获取输入R23C55,提取数字23和55,并提供BC23表格的输出?

2 个答案:

答案 0 :(得分:2)

我认为您只需使用RxCy解析scanf字符串:

int main()
{
    int column, row, cr,temp,i=0;
    char col[5];

    cr = scanf("R%dC%d",&row, &column);
    /* if cr == 2, row and column containing the coordinates */
   ... 

答案 1 :(得分:2)

#include<cstdio>
void g(int t){if(t){g((t-1)/26);putchar(65+(t-1)%26);}}
int main(){
  int n,x,y;
  char s[64];

    fgets(s,64,stdin);
    if(sscanf(s,"R%dC%d",&x,&y)==2){
      g(y);
      printf("%d\n",x);

  }
  return 0;
}

这个程序正是你想要的。从代码中可以清楚地看出逻辑。

  

点击此链接了解sscanf() sscanf

     

这里为您的使用scanf(“R%dC%d”,..)也可以使用。但我已经使用sscanf()为您提供了一种方法,如果需要进一步处理,将会有所帮助。

输入格式为

4
R23C45
R24C55
R2C4
R12C45
那么你可以这样对待他们 -

fgets(s,64,stdin);
sscanf(s,"%d",&n);
for(i=0;i<n;i++)
{   fgets(s,64,stdin);
   ...
}