我有一串数字,例如“123456789”,我需要提取它们中的每一个以在计算中使用它们。我当然可以通过索引访问每个char,但是如何将其转换为int?
我已经研究过atoi(),但它需要一个字符串作为参数。因此,我必须将每个char转换为字符串,然后在其上调用atoi。还有更好的方法吗?
答案 0 :(得分:135)
您可以利用数字的字符编码从48(对于'0')到57(对于'9')的顺序。这适用于ASCII,UTF-x和几乎所有其他编码(请参阅下面的评论以获取有关此的更多信息)。
因此,任何数字的整数值都是数字减去'0'(或48)。
char c = '1';
int i = c - '0'; // i is now equal to 1, not '1'
是
的同义词char c = '1';
int i = c - 48; // i is now equal to 1, not '1'
但是我发现第一个c - '0'
更具可读性。
答案 1 :(得分:20)
#define toDigit(c) (c-'0')
答案 2 :(得分:8)
或者您可以使用“正确”方法,类似于您原来的atoi方法,但使用std :: stringstream。这应该与字符作为输入和字符串一起使用。 (boost :: lexical_cast是更方便语法的另一种选择)
(atoi是一个旧的C函数,通常建议尽可能使用更灵活和类型安全的C ++等价物.std :: stringstream涵盖与字符串之间的转换)
答案 3 :(得分:4)
// Required -- JUnit 4 framework
testCompile 'junit:junit:4.12'
答案 4 :(得分:3)
只要您只想处理阿拉伯数字,并且正在编码中这些数字是连续的,并且与ASCII相同的地方,所提供的答案都很棒。
几乎总是如此。
如果不是,那么你需要一个合适的图书馆来帮助你。
让我们从ICU开始。
UBool u_isdigit (UChar32 c)
int32_t u_charDigitValue ( UChar32 c )
或者也许ICU有一些功能可以帮到你 - 我没有仔细研究过它。
答案 5 :(得分:2)
#include<iostream>
#include<stdlib>
using namespace std;
void main()
{
char ch;
int x;
cin >> ch;
x = char (ar[1]);
cout << x;
}
答案 6 :(得分:1)
如果 担心编码,则可以始终使用switch语句。
请注意保留这些大数字的格式。某些系统中整数的最大大小低至65,535(签名为32,767)。其他系统,你有2,147,483,647(或4,294,967,295未签名)
答案 7 :(得分:1)
以下方式出现任何问题?
int CharToInt(const char c)
{
switch (c)
{
case '0':
return 0;
case '1':
return 1;
case '2':
return 2;
case '3':
return 3;
case '4':
return 4;
case '5':
return 5;
case '6':
return 6;
case '7':
return 7;
case '8':
return 8;
case '9':
return 9;
default:
return 0;
}
}
答案 8 :(得分:1)
通过这种方式,您可以轻松地将char转换为int,将int转换为char:
int charToInt(char c)
{
int arr[]={0,1,2,3,4,5,6,7,8,9};
return arr[c-'0'];
}
答案 9 :(得分:0)
对我来说,以下方法效果很好:
QChar c = '5';
int x = c.digitValue();
// x is now 5
文档:int QChar::digitValue() const,其中:
返回数字的数字值,如果字符不为-1,则返回-1 一个数字。
答案 10 :(得分:0)