c ++数字搜索号码

时间:2015-04-12 20:42:00

标签: c++

我是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'

我尝试将变量类型更改为字符串,但它会产生更多错误等等。有没有人有办法更容易地搜索数字?

4 个答案:

答案 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;
}