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