2015-04-16 28 views
0

В таблице Excel мы имеем каждую ячейку, обозначенную ее строкой и столбцом, либо в формате R1C1, либо в формате A1.Преобразование формата R1C1 в формат A1

Формат R1C1 указывает номер строки и номер столбца. Например, R23C55 означает строку 23 и столбец 55.

В формате A1 каждому столбцу предоставляется код на основе перестановок алфавита. Рассмотрим первые 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

Я думаю, что вам будет нужно дать немного больше деталей. – nana

+0

Я не понимаю, какие правила преобразования вы указываете! Можете ли вы дать больше информации? –

+0

@SergioFormiggini: думаю Excel. R1C1 = числовые, 1-основанные индексы для строк и столбцов; A1 = одна или две буквы для столбцов (A-> Z, AA-AZ, BA-> BZ ..., ZA-> ZZ), индекс на 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

Здесь для использования зсапЕ ("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); 
    ... 
} 
+0

работает. Пытается понять, что делает sscanf –

+0

спасибо большое ... он сработал .. с и без sscanf –

+0

'gets()' больше не доступен с C11 в качестве стандартной функции. – chux

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 */ 
    ... 
+0

Это точно, что я не уверен в –

+1

Вы могли бы объяснить, что такое cr == 2? –

+0

Вот почему я советую вам проверить возврат 'scanf'. Он работает .... если вход имеет правильный формат (даже если он будет принимать входы, содержащие пробелы, такие как «R 1C 12') –

Смежные вопросы