我有一串数字,例如"123456789",我需要提取每一个数字,以便在计算中使用它们。当然,我可以通过索引访问每个字符,但如何将其转换为int?
我研究过atoi(),但它接受一个字符串作为参数。因此,我必须将每个字符转换为字符串,然后对其调用atoi。有没有更好的方法?
发布于 2009-01-13 16:10:44
您可以利用数字的字符编码都是从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'
的可读性要好得多。
发布于 2010-12-08 22:50:53
#define toDigit(c) (c-'0')
发布于 2009-01-13 17:03:52
或者,您可以使用“正确”方法,类似于最初的atoi方法,但使用std::stringstream。这应该可以使用字符作为输入,也可以使用字符串。(boost::lexical_cast是另一个更方便的语法选项)
(atoi是一个旧的C函数,通常建议在可能的情况下使用更灵活和类型安全的C++等效项。std::stringstream涵盖了字符串之间的转换)
https://stackoverflow.com/questions/439573
复制相似问题