所以我有一个四位数的数字,这是我正在制作的一个简单谜题中的玩家输入,我希望能够检查每个数字,比如说我想检查右边的第二个数字,如果数字恰好是 4601 那么当然会是 6,但除了测试每个四位数之外,它们是不是更快的方法?我通过搜索找到了一些结果,但它们没有帮助,它们只是让我更加困惑,请说出任何答案,以便任何人都能理解。我也在使用c++。
问问题
11203 次
3 回答
4
要从任意整数中检索第二个最重要的(以十为基数)数字,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,并且位置向右增加。
于 2012-11-12T05:08:11.267 回答
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]
将显示第二个数字。
于 2012-11-12T05:25:17.693 回答
0
您可以将数字读取为 anint
并将其转换为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
}
于 2012-11-12T05:05:21.773 回答