Excel格式地址转换

Excel格式地址转换


【编程题】(满分21分)

    Excel是最常用的办公软件。每个单元格都有唯一的地址表示。比如:第12行第4列表示为:“D12”,第5行第255列表示为“IU5”。
   
    事实上,Excel提供了两种地址表示方法,还有一种表示法叫做RC格式地址。 第12行第4列表示为:“R12C4”,第5行第255列表示为“R5C255”。

    你的任务是:编写程序,实现从RC地址格式到常规地址格式的转换。

【输入、输出格式要求】

    用户先输入一个整数n(n<100),表示接下来有n行输入数据。

    接着输入的n行数据是RC格式的Excel单元格地址表示法。

    程序则输出n行数据,每行是转换后的常规地址表示法。

    例如:用户输入:
2
R12C4
R5C255

    则程序应该输出:
D12
IU5

结题思路:字符串处理,26进制转换。特别注意26要被转换成Z,因为A表示的是1而不是0。
代码如下:
(代码实现了两种格式的互换问题)

import  java.util. * ;


public   class  Main  {
    
    
    
static int N;
    
static String instr1;
    
public static void main(String[] args)
    
{
        Scanner sc 
= new Scanner(System.in);
        N 
= sc.nextInt();
        sc.nextLine();
        
for(int i = 0; i < N; i++){
            instr1 
= sc.nextLine();
            
if(isRC(instr1)){
                toAN();
            }

            
else{
                toRC();
            }

        }

        
    }

    
static void toRC(){
        
/**//*
         * D12-->R12C4
         
*/

        
int i = 0;
        
int numc = 0;
        
while(Character.isLetter(instr1.charAt(i))){
            numc 
*= 26;
            numc 
+= instr1.charAt(i) - 'A' + 1;
            i
++;
        }

        
int numr = Integer.parseInt(instr1.substring(i));
        System.out.println(
"R" + numr + "C" + numc);
    }

    
static void toAN(){
        
/**//*
         * R12C4-->D12
         
*/

        StringBuffer sbuf 
= new StringBuffer();
        String[] strs 
= instr1.split("[RC]");//正则式很有趣
        int numc = Integer.parseInt(strs[2]);
        
while(numc > 0){
            
char c = (char)((numc - 1% 26 + 'A');//num - 1,避免26被转换为A
            sbuf.append(c);
            numc 
= (numc - 1/ 26;//num - 1,避免26被转换为AZ
        }

        System.out.println(sbuf.reverse() 
+ strs[1]);
    }

    
    
static boolean isRC(String instr){
        
int count = 0;
        
boolean isnumbg = false;
        
for(int i = 0; i < instr.length(); ){
            
if(Character.isDigit(instr.charAt(i))){
                
if(isnumbg){
                    i
++;
                }

                
else{
                    isnumbg 
= true;
                    count
++;
                    i
++;
                }

            }

            
else{
                
if(isnumbg){
                    isnumbg 
= false;
                }

                i
++;
            }

        }

        
if(count == 2)
            
return true;
        
return false;
    }

        
}


 

你可能感兴趣的:(Excel格式地址转换)