在excel2003中,用A表示第一列,B表示第二列….Z表示第26列,AA表示27列,AB表示28列。
1、输入用字母表示的列号编号,输出它是第几列 —->把26进制转成10进制
//把26进制转成10进制
int index(char *str,char x)
{
int i = 0;
for(;i<strlen(str);i++)
{
if(str[i] == x)
break;
}
return i+1;
}
int strToNumber(char *str)//////给一个字符串求出它在第几列
{
int len = strlen(str);
if(str==NULL || len<=0)
return 0;
int col = 0;
char *tmp = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for(int i=0;i<len;i++)
{
int pos = index(str,str[i]);
if(pos <= 0)
return 0;
col += pos*(int)pow(26,len-1-i);
}
return col;
}
int main()
{
cout<<strToNumber("A")<<endl;
cout<<strToNumber("B")<<endl;
cout<<strToNumber("AB")<<endl;
cout<<strToNumber("ABC")<<endl;
return 0;
}
2、输入第几列,输出用字母表示的列号编号
//10进制转成26进制
int Count(int cols)
{
int count = 0;
do
{
count++;
cols /= 26;
}while(cols != 0);
return count;
}
void reverseStr(char *str)//字符串逆置
{
char * p =str;
char tmp;
while(*p != '\0')
{
p++;
}
p--;
for(;str<=p;str++,p--)
{
tmp = *str;
*str = *p;
*p = tmp;
}
}
char *numberToStr(int cols)
{
int count = Count(cols);//字符串的长度
char *str = (char *)malloc(count+1);
assert(str != NULL);
int i = 0;
while(cols != 0)
{
int tmp = cols % 26;
cols /= 26;
if(tmp == 0)// ‘Z’
{
tmp = 26;
cols -= 1;
}
str[i++] = (char)('A'+tmp-1);
}
str[i] = '\0';
reverseStr(str);
return str;
}
int main()
{
for(int i=0;i<30;i++)
{
cout<<numberToStr(i)<<ends;
}
cout<<endl;
return 0;
}