编程实现excle的行列命名与另一种表示方式的相互转换-创新互联
小B最近对电子表格产生了浓厚的兴趣,她觉得电子表格很神奇,功能远比她想象的强大。她正在研究的是单元格的坐标编号,她发现表格单元一般是按列编号的,第1列编号为A,第2列为B,以此类推,第26列为Z。之后是两位字符编号的,第27列编号为AA,第28列为AB,第52列编号为AZ。之后则是三位、四位、五位……字母编号的,规则类似。
创新互联服务项目包括湘西土家族网站建设、湘西土家族网站制作、湘西土家族网页制作以及湘西土家族网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,湘西土家族网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到湘西土家族省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!表格单元所在的行则是按数值从1开始编号的,表格单元名称则是其列编号和行编号的组合,如单元格BB22代表的单元格为54列中第22行的单元格。
小B感兴趣的是,编号系统有时也可以采用RxCy的规则,其中x和y为数值,表示单元格位于第x行的有第y列。上述例子中的单元格采用这种编码体系时的名称为R22C54。
小B希望快速实现两种表示之间的转换,请你帮忙设计程序将一种方式表示的坐标转换为另一种方式。
输入的第一行为一个正整数T,表示有T组测试数据(1<=T<=10^5)。随后的T行中,每行为一组测试数据,为一种形式表示的单元格坐标。保证所有的坐标都是正确的,且所有行列坐标值均不超过10^6。
对每组测试数据,单独输出一行,为单元格坐标的另一种表示形式。
2
R23C55
BC23
BC23
R23C55
分析:因为所有行列坐标值均不超过10^6 XXXXX999999 最多12个字符(5+6+1)可以存下
代码实现:
test.c
#include#include #include #include char * my_itoa(int value,char *str)//模拟实现itoa(整数转换成字符串) { int i=0; while(value!=0){ str[i++]=value%10+'0'; value/=10; } int start=0; int end=i-1; while(start =0){ ret*=x; } return ret; } char *coord(char *a,char *b,int len) { assert(a); int flag=0; if(a[0]=='R'&&a[1]>='0'&&a[1]<='9'){//maybe FrLc(R23C55形式) maybe FcLr(BC23形式) int i=2; while(a[i]!=0){ if(a[i]=='C'){ flag=1; break; } i++; } } if(flag==1){//must be FrLc int i=1; int k=0; char row[5]={0}; while(a[i]!='C'){ row[k++]=a[i++]; } while(a[i]<='0'||a[i]>='9'){ i++; } k=0; char tmp[5]={0}; while(a[i]!=0){ tmp[k++]=a[i++]; } int col=atoi(tmp); int j=0; int ret[5]={0}; while(col>0){ ret[j++]=col%26; col/=26; } int start=0; int end=0; while(ret[end]!=0){ end++; } end-=1; while(start ='A'&&a[i]<='Z'){ i++; } int j=i; int col=0; while(--j>=0){ col+=my_pow(26,i-j-1)*(a[j]-'A'+1); } char str[12]={0}; my_itoa(col,str); memset(b,'\0',sizeof(char)*12); b[0]='R'; int k=1; while(0!=(b[k++]=a[i++])) ; k-=1; b[k++]='C'; strcat(b,str); } return b; } int main() { char a[12]={0}; char b[12]={0}; while(scanf("%s",a)!=EOF){ coord(a,b,12); int i=0; while(b[i]!=0){ printf("%c",b[i]); i++; } printf("\n"); } return 0; }
Makefile:
bin=test src=test.c cc=g++ $(bin):$(src) cc -o $@ $^ -g .PHONY:clean clean: rm -f $(bin)
运行结果:
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。
当前文章:编程实现excle的行列命名与另一种表示方式的相互转换-创新互联
本文URL:http://myzitong.com/article/ceiphd.html