我有一个数字字符串, 例如"123456789", 我需要提取其中的每个数字用于计算。我当然可以通过索引访问每个字符,但如何将其转换为整数呢?
我查看了atoi(),但它以字符串作为参数。因此,我必须将每个字符转换为字符串,然后调用atoi()函数。是否有更好的方法?
我有一个数字字符串, 例如"123456789", 我需要提取其中的每个数字用于计算。我当然可以通过索引访问每个字符,但如何将其转换为整数呢?
我查看了atoi(),但它以字符串作为参数。因此,我必须将每个字符转换为字符串,然后调用atoi()函数。是否有更好的方法?
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'
更易读。
c - '0'
在所有系统上都可用,而例如在EBCDIC系统上表达式c - 48
将无法使用。 - M.M#define toDigit(c) (c-'0')
或者您可以使用“正确”的方法,类似于您原来的 atoi 方法,但是改用 std::stringstream。这种方法可以处理字符和字符串作为输入。(boost::lexical_cast 是另一种更方便的语法选项)
(atoi 是一个古老的 C 函数,通常建议尽可能使用更灵活和类型安全的 C++ 替代方法。std::stringstream 可以覆盖从字符串到数值类型的转换)
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv[]){
int num ;
num = atoi(argv[1]);
printf("\n%d", num);
}
atoi
将一串字符转换为数字,而不是像 OP 想要的那样将单个字符转换。 - osvein#include<iostream>
#include<stdlib>
using namespace std;
void main()
{
char ch;
int x;
cin >> ch;
x = char (ar[1]);
cout << x;
}
如果您担心编码问题,您可以始终使用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;
}
}
int charToInt(char c)
{
int arr[]={0,1,2,3,4,5,6,7,8,9};
return arr[c-'0'];
}
x
, arr[x] == x
。由于访问数组越界是未定义行为,因此可以假设arr[x] == x
对于所有的x
成立。 - user202729