如何将单个字符转换为int

我有一串数字,例如“123456789”,我需要提取它们中的每一个在计算中使用它们。 我当然可以通过索引访问每个字符,但是如何将其转换为int?

我已经看过atoi(),但它需要一个string作为参数。 因此,我必须将每个字符转换为一个string,然后调用atoi。 有没有更好的办法?

您可以利用数字字符编码全部从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'更具可读性。

 #define toDigit(c) (c-'0') 

或者你可以使用“正确”的方法,类似于你原来的atoi方法,但用std :: stringstream来代替。 这应该与字符作为input以及string。 (boost :: lexical_cast是更方便的语法的另一种select)

(atoi是一个旧的C函数,通常build议尽可能使用更灵活和types安全的C ++对象,std :: stringstream包含string转换和string转换)

你可以使用atoi()函数

 #include <stdlib.h> #include <stdio.h> int main(int argc, char* argv[]){ int num ; num = atoi(argv[1]); printf("\n%d", num); } 

所提供的答案是非常好的,只要你只想处理阿拉伯数字,并且正在编码中这些数字是连续的,并且与ASCII相同。

这几乎总是如此。

如果不是那么你需要一个合适的图书馆来帮助你。

让我们从ICU开始。

  1. 首先将字节string转换为一个unicodestring。 (留给读者练习)。
  2. 然后使用uchar.h来查看每个字符。
  3. 如果我们的angular色是UBool u_isdigit (UChar32 c)
  4. 那么值是int32_t u_charDigitValue ( UChar32 c )

或者,也许ICU有一些function为你做 – 我没有详细看过。

 #include<iostream> #include<stdlib> using namespace std; void main() { char ch; int x; cin >> ch; x = char (ar[1]); cout << x; } 

通过这种方式你可以很容易地将char转换为int和int为char:

 int charToInt(char c) { int arr[]={0,1,2,3,4,5,6,7,8,9}; return arr[c-'0']; } 

如果你担心编码,你可以使用switch语句。

只要注意保留大数字的格式即可。某些系统中整数的最大值为65,535(32,767)。 其他系统,你有2,147,483,647(或4,294,967,295未签名)

任何问题以下面的方式来做?

 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; } }