找出对应于字母表的字母的数字?
我试图复制Excel提供的方式标注其列,其中找出对应于字母表的字母的数字?
A = 1
B = 2
等等等等,所以它最终到达
AB
AC
AD
等,等
如何算法取号(如52),并将其转换为其对应的字母表达?
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;
}
希望有帮助。
Convert.ToInt32(“52”,26)....现在只需创建正确的基本实现。 ?家庭作业 ?
你可能会觉得写一些算法中一样的:
ConvertToAlphaCode(number input)
{
Array Chars=[A-Z]
if (number<= 26)
return Chars[number-1]
else
...
}
看一看:
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(字母),并确保使用正确的字符表示最终的“数字”。就如此容易!
从编号以字母:
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转换,即 。
这将做到这一点相当不错:
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
。
如果这不是您正在查找的计算结果,请留下评论以澄清您的要求,然后我会回过头来改变它。
请注意,字母的编码不保证是连续的(尽管除了IBM大型机,你不太可能遇到一个编码,26个不重叠的字母不连续)。 – 2011-12-29 17:48:07
两个字母
#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);
}
这将与所有类型的字母(小,大)工作。
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)
我不明白为什么有人要选关闭它?如果问题不明确,可以要求澄清。 – Kangkan 2011-12-29 10:02:45
不,它的好问题+1 – Yola 2011-12-29 10:03:49
人们投票结束只是因为它不完全是一个问题。 Doh ... – Kos 2011-12-29 10:05:07