我有一串数字,例如"123456789",我需要提取它们中的每一个以在计算中使用它们.我当然可以通过索引访问每个char,但是如何将其转换为int?
我查看了atoi(),但它需要一个字符串作为参数.因此,我必须将每个char转换为字符串,然后在其上调用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.这应该与字符作为输入和字符串一起使用.(boost :: lexical_cast是更方便语法的另一种选择)
(atoi是一个旧的C函数,通常建议在可能的情况下使用更灵活和类型安全的C++等价物.std :: stringstream涵盖到字符串的转换)