2011-12-29 34 views
2

我试图复制Excel提供的方式标注其列,其中找出对应于字母表的字母的数字?

A = 1
B = 2

等等等等,所以它最终到达

AB
AC
AD

等,等

如何算法取号(如52),并将其转换为其对应的字母表达?

+1

我不明白为什么有人要选关闭它?如果问题不明确,可以要求澄清。 – Kangkan 2011-12-29 10:02:45

+1

不,它的好问题+1 – Yola 2011-12-29 10:03:49

+1

人们投票结束只是因为它不完全是一个问题。 Doh ... – Kos 2011-12-29 10:05:07

回答

2
string get(int a) { 
    a--; // Reduce by one to make the values with 1 letter 0..25, 
     // with two - 26.. 26^2-1 and so on 
    int val = 0; // number of columns with no more then given number of letters 
    int number = 0; 
    while (val < a) { 
    val = val*26 + 26; 
    number++; 
    } 
    val = (val - 26)/26; 
    a -= val; // subtract the number of columns with less letters 
    string res; 
    for (int i = 0; i < number; ++i) { 
    res.push_back(a%26 + 'A'); 
    a /= 26; 
    } 
    reverse(res.begin(), res.end()); 
    return res; 
} 

希望有帮助。

1

Convert.ToInt32(“52”,26)....现在只需创建正确的基本实现。 ?家庭作业 ?

1

你可能会觉得写一些算法中一样的:

ConvertToAlphaCode(number input) 
{ 
    Array Chars=[A-Z] 
    if (number<= 26) 
     return Chars[number-1] 
    else 
     ... 
} 
1

看一看:

A, B, C, D, ..., Y, Z, AA, AB, AC, AD, ..., AY, AZ, BA, BB, ...

酷似:

0, 1, 2, 3, 4, ..., 9, 10, 11, 12, 13, ..., 19, 20, 21, ...

但随着数字A..Z而不是0..9。所以:

算法盟友我不知道我怎样才能得到一个数字,好比说52,并将其转换为等效的字母表达..

你需要使用一个通用的算法将base-N中的数字转换为base -M(如十进制到十六进制),但N等于10,M等于26(字母),并确保使用正确的字符表示最终的“数字”。就如此容易!

0

从编号以字母:

static std::string const letters("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); 
assert(n >= 0 && n < letters.size()); 
return letters[n]; 

从信号:

static std::string const letters("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); 
char const* result = std::find(
      letters.begin(), 
      letters.end(), 
      isupper(static_cast< unsigned char >(l)); 
assert(result != letters.end()); 
return result - letters.begin(); 

编辑:

这只是处理在每个方向上的单个字符。如需更多信息,则只需使用通常的转换例程,即可进行基本26转换,即 。

1

这将做到这一点相当不错:

string calcString(int number) 
{ 
    string returnValue = ""; 
    do 
    { 
     int rm = number % 26; 
     returnValue += (char)(rm+ 'A'); 
     number = (number - rm)/26; 
    } 
    while (number > 0); 

    return returnValue; 
} 

例如,calcString(11);结果L

如果这不是您正在查找的计算结果,请留下评论以澄清您的要求,然后我会回过头来改变它。

+0

请注意,字母的编码不保证是连续的(尽管除了IBM大型机,你不太可能遇到一个编码,26个不重叠的字母不连续)。 – 2011-12-29 17:48:07

2

两个字母

#include <iostream> 
#include <string> 

using namespace std; 

string int2alphas(int i) { 
    string res; 
    if (i > 26 - 1) 
     res.push_back(i/26 + 'A' - 1); 
    else 
     res.push_back(' '); 
    res.push_back(i % 26 + 'A'); 
    return res; 
} 

void test(int t) { 
    cout << t << "-" << int2alphas(t) << endl;; 
} 


int main() { 
    for (int i = 0; i < 55; i++) 
     test(i); 
} 
0

这将与所有类型的字母(小,大)工作。

using namespace std; 

int lettervalue (string l) { 
    l=l[0]; 
    string alpha="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; 
    int idx = alpha.find(l)+1; 
    if(idx>26){ 
     idx=idx-26; 
    } 

    return idx; 

} 

要使用它:

cout << lattervalue("e"); //will return 5(int) 
相关问题