如何从包含多个数字的数字中获取一个单独的数字

时间:2012-11-12 05:02:24

标签: c++

所以我在一个简单的拼图中有一个四位数的玩家输入,我希望能够检查每个数字,说我想检查右边的第二个数字,如果数字恰好是那么4601当然会是6但是除了测试每一个四位数之外他们是一个更快的方式吗? 我在搜索中找到了一些结果,但是他们没有帮助,他们只是把我弄糊涂了,请说出任何答案,这样任何人都可以理解它们。 我也在使用c ++。

3 个答案:

答案 0 :(得分:3)

要从任意整数i中检索第二个最重要(基数十)的数字,您可以这样做:

while (i >= 100)
    i /= 10;
return i % 10;

当然,这假设数字大于或等于10开头。如果您需要保留该号码,那么您(显然)希望在副本上运行。

编辑:

可以使用算术或字符串操作定义用于提取任意数字的函数。

算术解决方案:

int extractDigit(size_t digit, int n) {
    int mask = 1;
    while ( digit --> 0 )
        mask *= 10;
    if (n < mask / 10) { // insufficient digits
        return -1; // or some other appropriate error handling.
    while ( n >= mask )
        n /= mask;
    return n % 10;
}

字符串解决方案:

#include <sstream>
#include <string>
using std::string;
using std::stringstream;

int extractDigit(size_t digit, int n) {
    string result = static_cast<stringstream&>(stringstream() << n).str();
    if (result.size() < digit) {
        return -1;
    }
    return result[digit-1] - '0';
}

这两个解决方案都隐含地假设n将是非负的。如果需要,可以使用无符号数据类型强制执行此前置条件。此外,这两个函数都定义了数字位置,使得最重要的位于位置1,位置增加到右侧。

答案 1 :(得分:1)

在你拿到数字之后,我不会猜测你要做什么。但是如果它只有你想要的数字,那么你可以在下面使用:

int a=1234;
char b[4];
sprintf(b,"%d",a);
char c=b[1];

现在c有4位数字的第二位数字。 同样明智的是,您可以使用索引到字符数组b

来访问所有数字

对于c ++等价的请参见下文:

  std::ostringstream out;
  out << age;

现在out.str()[1]将显示第二位数字。

答案 2 :(得分:0)

您可以将该数字读作int并将其转换为char数组,并将每个字符检查为数字

示例:

char digits[5];
int number;
//Read number in
scanf("%d",&number);
//Make sure it's 4 digits
number%=10000;
//Convert it to a char array
sprintf(digits,"%d",number)

if(digits[1]=='6')
{
    //do stuff
}