在C ++中将字母转换为数字

时间:2014-02-17 15:24:41

标签: c++

问题已解决:谢谢大家!

我对C ++几乎全新,所以如果这个问题看似微不足道,我会事先道歉。

我正在尝试将一串字母转换为一组2位数字,其中a = 10,b = 11,...,Y = 34,Z = 35,以便(例如)“abc def”去到“101112131415”。我该怎么做呢?真的很感激任何帮助。另外,我不介意大写是否会产生相同的数字或不同的数字。非常感谢你提前。我可能不会需要它几天,但如果有人感觉特别好,我将如何扭转这个过程?即“101112131415” - > “abcdef”谢谢。

编辑:这不是家庭作业,我完全是自学成才。我以前用不同的语言完成了这个项目,并决定尝试使用C ++来比较差异并尝试在此过程中学习C ++:)

编辑:我大概有我想要的东西,我只需要一些帮助就可以转换它,以便它适用于字符串,谢谢你们。

#include <iostream>
#include <sstream>
#include <string>

int returnVal (char x)
{
    return (int) x - 87;
}

int main()
{
    char x = 'g';
    std::cout << returnVal(x);
}

7 个答案:

答案 0 :(得分:2)

便携式方法是使用表查找:

const unsigned int letter_to_value[] = 
{10, 11, 12, /*...*/, 35};

// ...

letter = toupper(letter);
const unsigned int index = letter - 'A';
value = letter_to_value[index];
cout << index;

答案 1 :(得分:1)

每个角色都有它的ASCII值。尝试将您的角色转换为ASCII,然后操纵差异。

示例:

int x = 'a';
cout << x;

将打印97;和

int x = 'a';
cout << x - 87;

将打印10。

因此,您可以编写如下函数:

int returnVal(char x)
{
    return (int)x - 87;
}

获取所需的输出。

您的主程序可能如下:

int main()
{
    string s = "abcdef"
    for (unsigned int i = 0; i < s.length(); i++)
    {
        cout << returnVal(s[i]);
    }
    return 0;
}

答案 2 :(得分:0)

丹尼尔说,亲自尝试一下。

作为一个起点,铸造:

int i = (int)string[0] + offset;

会从角色中获取您的号码,并且:stringstream也会有用。

答案 3 :(得分:0)

  

我将如何做到这一点?

首先尝试某事,只有在你觉得无法前进的时候才寻求帮助。

话虽如此,想到的最明显的解决方案是基于字符(即'a''G')确实是数字的事实。假设您有以下内容:

char c = 'a';

您可以通过以下方式获取与c相关联的号码:

int n = static_cast<int>(c);

然后,为'n'添加一些偏移量:

n += 10;

...并将其投回char

c = static_cast<char>(n);

注意:以上假设字符是连续的,即对应于'a'的数字等于对应于'z'的数字减去两者之间的字母数量。但这通常是成立的。

答案 4 :(得分:0)

这可以工作

int Number = 123; // number to be converted to a string

string Result; // string which will contain the result

ostringstream convert; // stream used for the conversion

convert << Number; // insert the textual representation of 'Number' in the characters in the stream

Result = convert.str(); // set 'Result' to the contents of the stream

你应该添加这个标题 #include <sstream> #include <string>

答案 5 :(得分:0)

许多答案会告诉您字符是用ASCII编码的,您可以通过减去'a'将字母转换为索引。

这不是正确的C ++。当您的程序要求包含ASCII正在使用的规范时,这是可以接受的。但是,仅C ++标准并不需要这样做。有其他字符集的C ++实现。

如果不知道正在使用ASCII,您可以使用转换表:

#include <limits.h>

// Define a table to translate from characters to desired codes:
static unsigned int Translate[UCHAR_MAX] =
{
    ['a'] = 10,
    ['b'] = 11,
    …
};

然后,您可以通过在表格中查找字符来将字符翻译成数字:

unsigned char x = something;

int result = Translate[x];

翻译后,您可以使用printf("%02d", result);将其打印为两位数。

在另一个方向翻译需要读取两个字符,将它们转换为数字(将它们解释为十进制),并执行类似的翻译。您可能为此反向翻译设置了不同的转换表。

答案 6 :(得分:0)

只需这样做!

(s[i] - 'A' + 1)

基本上,我们将char转换为数字,方法是将其减去A,然后再添加1以匹配数字和字母