我是c ++的新手,并且遇到了这个问题,我真的不确定如何继续。
我将获得0-999之间的数字,并且我试图确定1,4或7中的数字是否出现在该数字中。
我已尝试使用find_first_of()
,但我遇到了很多错误。
到目前为止,这是我的代码:
double ctemp;
cin >> ctemp;
if(ctemp.find_first_of(1)==-1 && ctemp.find_first_of(4)==-1 && ctemp.find_first_of(7)==-1)
{
cout << "Found digits 1, 4, 7.\n";
}
但是,当我运行此代码时,我收到以下错误:
11:18: error: request for member 'find_first_of' in 'ctemp', which is of non-class type 'double'
我尝试将变量类型更改为字符串,但它会产生更多错误等等。有没有人有办法更容易地搜索数字?
答案 0 :(得分:3)
如果您的号码是0到999之间的整数,那么您应该使用int
而不是double
。
解决这个问题的一种方法是采用10的模数,直到没有任何东西为止。通过这种方式,您将查看数字的最小数字(从右到左)。
#include <stdio.h>
int is_digit_in_number(int digit, int number)
{
int i;
if (number < 0) number = -number; /* see Cthulhu's comment */
while (number != 0) {
i = number % 10;
if (i == digit) return 1;
number = number / 10;
}
return 0;
}
int main()
{
printf("3 in 12345: %d \n", is_digit_in_number(3, 12345));
printf("9 in -12345: %d \n", is_digit_in_number(9, -12345));
return 0;
}
答案 1 :(得分:2)
您必须以string
的形式输入您的号码,或者稍后将其转换为string
,因为find_first_of()
适用于string
。
它返回匹配的第一个字符的位置。
如果未找到匹配项,则函数返回string::npos
(= -1)。
string ctemp;
cin >> ctemp;
if(ctemp.find_first_of('1')!=string::npos && ctemp.find_first_of('4')!=string::npos&& ctemp.find_first_of('7')!=string::npos)
{
cout << "Found digits 1, 4, 7.\n";
}
答案 2 :(得分:0)
您需要将您的号码转换为字符串并搜索数字。
std::string str = std::to_string(ctemp);
if(str.find_first_of('1')!=std::string::npos ||
str.find_first_of('4')!=std::string::npos ||
str.find_first_of('7')!=std::string::npos)
{
cout << "Found digits 1, 4, 7.\n";
}
答案 3 :(得分:0)
如果整数包含1,4或7,则可以通过检查最后一位(1位数)(如果是1位,4位或7位)来搜索整数,并删除该位以检查下一位。
#include <iostream>
using namespace std;
int main()
{
int a;
bool numberFound = false;
cout << "Enter a number: ";
cin >> a;
while (a != 0)
{
// determines if the last number is either 1, 4, or 7
switch (a % 10)
{
case 1:
cout << "1 is in the number." << endl;
numberFound = true;
break;
case 4:
cout << "4 is in the number." << endl;
numberFound = true;
break;
case 7:
cout << "7 is in the number." << endl;
numberFound = true;
break;
default:
numberFound = false;
break;
}
a /= 10; // removes the last digit so the next one can be checked
}
if (!numberFound)
cout << "1, 4, or 7 isn't in the number." << endl;
system("pause");
return 0;
}