用C++将字母转换为数字
Converting letters to numbers in 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);
}
一种可移植的方法是使用表查找:
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以匹配数字和字母
- 将数字转换为字母(例如:123 转换为一二三)
- 将数字转换为单词
- 使用if-else将数字转换为单词
- 将数字转换为填充字符串
- 函数在许多数字上转换为基数 1 时减去 2?
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 如何将 UTF-8 文本从文件转换为某个可以迭代的容器,并检查每个符号是否为C++字母数字?
- 将 C 函数转换为 C++ 以检查数字是否有效
- 编译时间文本到数字转换 (atoi)
- 以C++格式将字符串转换为数字
- 在 c++ 中将数字转换为矢量数组的函数
- 奇怪的数字转换C++
- 我想使用 std::stoi 函数在 cpp 中将字符串转换为整数,因为我想在字符串中找到不同数字的总和(在下级酶中)
- 用C++将浮点数字转换为本地化字符串
- 我需要静态转换我的数字模板值吗
- 如何将boost::asio::ip::address_v6 ip转换为2个uint64_t数字,并从2个uint 64
- Rcpp - 用二进制函数转换数字向量?
- 我如何使用堆栈转换数字从基数10到基数2在c++
- 如何在c++中从字节数组中的整数转换数字
- c++程序转换数字的位数