如何使用字符串数组来细分数字的各个数字?

时间:2017-11-22 05:06:02

标签: c++ c++14

我必须编写一个代码,该代码接受输入并打印出一个由原始数字中存在的素数组成的新数字。 恩。输入:453 产量:53 我已经写了代码:

#include <iostream>
#include<string>

using namespace std;

int main()
{
    int number;
    int digit;
    int reverse = 0;
    int reverse1;
    int digit1;
    cout<<"input a number"<<endl;
    cin>>number;
    int flag = 0;

    while(number!=0)
    {
        digit = number % 10;
        number = number / 10;
        for(int i = 2; i < digit; i++)
        {
            if(digit % i == 0)
            {
                flag = 1;
            }
        }
        if(flag == 0)
        {
            reverse = reverse * 10 + digit;
        }
    }

    reverse1 = reverse;
    while(reverse1 != 0)
    {
        digit1 = reverse1 % 10;
        reverse1 = reverse1 / 10;
        cout<<digit1;
    }

    cout<<endl;
}

更好的方法是生成相同的输出,但代码更短。我刚刚开始学习编程,所以请提供易于理解的解决方案:)

1 个答案:

答案 0 :(得分:2)

如果我了解您正在尝试正确执行的操作(有效删除输入数字中除2,3,5和7之外的数字),那么这应该有效:

#include <algorithm>
#include <iostream>
#include <set>
#include <string>

using namespace std;

int main() {
    const set<int> primes{2, 3, 5, 7};
    string num;
    cin >> num;
    num.erase(remove_if(begin(num), end(num), [&](char c){ return !primes.count(c - '0'); }), end(num));
    cout << num << '\n';
}

没有错误检查有效数字输入,但如果需要,可以轻松添加。 Live version.