在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表格的输出?
答案 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);
...
}