用C++将字母转换为数字

Converting letters to numbers in C++

本文关键字:转换 数字 C++      更新时间:2023-10-16

问题解决了:谢谢大家!

我对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);
}

一种可移植的方法是使用表查找:

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;

每个字符都有其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;
}

许多答案都会告诉您,字符是用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);将其打印为两位数字。

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

这是一种简单的方法,如果不是一团糟的话。

map<char, int> vals; // maps a character to an integer
int g = 1; // if a needs to be 10 then set g = 10
string alphabet = "abcdefghijklmnopqrstuvwxyz";
for(char c : alphabet) { // kooky krazy for loop
vals[c] = g;
g++;
}

丹尼尔说了什么,你自己试试看。

不过,作为一个起点,铸造:

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

将从字符中获取您的号码,并且:stringstream也将很有用。

我该怎么做?

首先尝试做某事,只有当您觉得无法前进时才寻求帮助。

话虽如此,脑海中最明显的解决方案是基于这样一个事实,即字符(即'a''G')实际上是数字。假设您有以下内容:

char c = 'a';

您可以通过以下操作获取与c相关的号码:

int n = static_cast<int>(c);

然后,将一些偏移量添加到"n":

n += 10;

并将其投射回char:

c = static_cast<char>(n);

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

这可以工作

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>

就这么做吧!

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

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