问题已解决:谢谢大家!
我对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);
}
答案 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以匹配数字和字母