将A1转换为R1C1格式

时间:2015-04-16 20:01:48

标签: c

作为我上一期问题的跟进here

我正在尝试与前一个问题相反。也就是说,将表单A1的输入转换为表单R1C1的输出(更多信息,请查看我的上一个问题)。

我会解释我的算法。我们假设我们需要将BC23转换为R23C55。我从BC23中提取了“BC”和“23”并将它们存储在单独的数组中。我创建了另一个数组,它存储值1,2,3 ......分别为A,B,C,当它们进入输入时。例如,我的数组将分别包含2和3作为B和C的前两个元素。然后我使用一些数学将其转换为数字,在本例中为55。对于BC。

这是完整的代码。

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

int main()
{
    char str[5],col[5],row[5];
    int i=0,j=0,k=0,lenOfstr,lenOfcol;
    scanf("%s",str);

    while(str[i]>='A'&&str[i]<='Z')
    {
        col[j]=str[i];
        i++;
        j++;
    }
    col[j]='\0';
    lenOfstr=strlen(str);
    lenOfcol=strlen(col);

    int ascCol[lenOfcol];

    for(i=lenOfcol;i<lenOfstr;i++)
    {
        row[k]=str[i];
        k++;
    }
    row[k]='\0';

    for(i=0;i<lenOfcol;i++)
    {
        ascCol[i]=col[i]-64;
    }

    int sum=0;
    for(i=0;i<lenOfcol;i++)
    {
        sum=sum+(ascCol[i]*pow(26,lenOfcol-i-1));
    }

    printf("%d",sum);

    return 0;
}

最后一段代码中有一个小错误,我无法调试。

    int sum=0;
    for(i=0;i<lenOfcol;i++)
    {
        sum=sum+(ascCol[i]*pow(26,lenOfcol-i-1));
    }

    printf("%d",sum);

输入Z应该给出输出26,AA应该给出27但是我的代码在两者上给出了26。此后输出始终比正确输出小1; BC给出54而不是55。

有人帮助我。

1 个答案:

答案 0 :(得分:4)

尝试将总和更改为:

sum = sum * 26 + ascCol[i]

这避免了担心pow返回浮点数这一事实导致的意外浮点舍入行为和其他问题。

请注意,您可以将整个程序简单地用于此:

#include <stdio.h>

int main()
{
    char str[5];

    scanf("%s", str);

    int i = 0;
    int sum = 0;    
    while(str[i] >= 'A' && str[i] <= 'Z')
    {
        sum = sum * 26 + (str[i] - 'A');
        i++;
    }

    printf("%d", sum);

    return 0;
}
相关问题