2015-03-23 2 views
-3

вопрос я застрял на требует наличия пользовательского ввода в «базовый 5 количество» (число, содержащее только 0s, 1с, 2с, 3с, и/или 4S)используя время цикла для подсчета и цифры дисплея

Я должен проверить номер, чтобы узнать, действительно ли это номер базы 5, если это так, мне нужно вывести количество вхождений каждого числа (число 0s, число 1 и т. Д.)

I смотрели онлайн уже для совета, но большинство из того, что я нашел, использует вещи, которые не были охвачены в материале курса, и для меня очень важно, чтобы я понял и понял материал, связанный с курсом.

Например, я знаю, что большинство людей будут использовать «массивы» для этого, но в этом случае я не могу этого сделать.

Так что, чтобы точно определить, что я ищу, нужно уметь выполнять то, что необходимо в этом вопросе, используя цикл WHILE.

Вот одна из моих попыток:

#include <iostream> 
using namespace std; 

int main() 
{ 
    int zeros = 0; 
    int ones = 0; 
    int twos = 0; 
    int threes = 0; 
    int fours = 0; 

    int number; 


    cout << "Please enter a base 5 number\n"; 
    cin >> number; 
    cout << endl; 

    while (cin.get() == '0') 
    { 
     zeros++; 
    } 

    while (cin.get() == '1') 
    { 
     ones++; 
    } 

    while (cin.get() == '2') 
    { 
     twos++; 
    } 

    while (cin.get() == '3') 
    { 
     threes++; 
    } 

    while (cin.get() == '4') 
    { 
     fours++; 
    } 

    cout << "Number of Zeros: " << zeros; 
    cout << endl; 
    cout << "Number of Ones: " << ones; 
    cout << endl; 
    cout << "Number of Twos: " << twos; 
    cout << endl; 
    cout << "Number of Threes: " << threes; 
    cout << endl; 
    cout << "Number of Fours: " << fours; 
    cout << endl; 


    return 0; 
} 

Я попытался с и без отдельных цитат вокруг цифр, и многие другие незначительные изменения кода не увенчались успехом. Также я считаю, что мне не хватает инструкции «если», чтобы проверить, действительно ли это номер базы 5, прежде чем использовать «whiles», но я просто не могу придумать, как можно проверить, что

Возможно, что-то вроде :

while (cin.get() != '0' || '1' || '2' || '3' || '4') 

......

?

и в любом случае «whiles» даже не подсчитывают в этом случае, и я не могу понять, почему!

Кроме того, причина, по которой я решил попробовать этот метод (помимо необходимости использовать цикл while и другие связанные с ним темы, связанные с курсом), я использовал тот же метод в предыдущей программе, которая работала отлично. Предыдущий был по существу пользователем, вводящим строку, и мне приходилось подсчитывать и выводить количество символов внутри него (включая пробелы, символы и т. Д.), Пока пользователь не нажмет «return». Вот часть этого старого кода:

char input; 
int counter = 0; 

while (cin.get() != '\n') 
    { 
     counter++;   
    } 

TL; др вход база 5 число, счет + выход число вхождений каждого числа, необходимо использовать во время цикла

+0

Вы на самом деле не объяснил, какие проблемы вы столкнулись, насколько как я могу судить. Я не понимаю эти циклы 'cin.get()'. Вы пытаетесь разобрать «номер»? –

+1

Ваша программа допускает только входные данные, где цифры находятся в возрастающем порядке ... e. г.'013' или' 1234'. –

ответ

0

Вы принимаете вход как int, то проверка на char. Если вы действительно хотите проверить против каждого char, вы должны принять string, а затем использовать цикл for для повторения каждой буквы.

#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
    int zeros = 0; 
    int ones = 0; 
    int twos = 0; 
    int threes = 0; 
    int fours = 0; 

    string number; 


    cout << "Please enter a base 5 number\n"; 
    cin >> number; 
    cout << endl; 

    for (char digit : number) 
    { 
     if (digit == '0') 
     { 
      zeros++; 
     } 
     else if (digit == '1') 
     { 
      ones++; 
     } 
     else if (digit == '2') 
     { 
      twos++; 
     } 
     else if (digit == '3') 
     { 
      threes++; 
     } 
     else if (digit == '4') 
     { 
      fours++; 
     } 
    } 

    cout << "Number of Zeros: " << zeros; 
    cout << endl; 
    cout << "Number of Ones: " << ones; 
    cout << endl; 
    cout << "Number of Twos: " << twos; 
    cout << endl; 
    cout << "Number of Threes: " << threes; 
    cout << endl; 
    cout << "Number of Fours: " << fours; 
    cout << endl; 
    return 0; 
} 

Live Demo

Также вместо того чтобы держать кучу переменных, как счетчики, вы могли бы просто использовать массив

#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
    int counts[5] = {0, 0, 0, 0, 0}; 
    string number; 

    cout << "Please enter a base 5 number\n"; 
    cin >> number; 
    cout << endl; 

    for (char digit : number) 
    { 
     if (digit == '0') 
     { 
      counts[0]++; 
     } 
     else if (digit == '1') 
     { 
      counts[1]++; 
     } 
     else if (digit == '2') 
     { 
      counts[2]++; 
     } 
     else if (digit == '3') 
     { 
      counts[3]++; 
     } 
     else if (digit == '4') 
     { 
      counts[4]++; 
     } 
    } 

    cout << "Number of Zeros: " << counts[0]; 
    cout << endl; 
    cout << "Number of Ones: " << counts[1]; 
    cout << endl; 
    cout << "Number of Twos: " << counts[2]; 
    cout << endl; 
    cout << "Number of Threes: " << counts[3]; 
    cout << endl; 
    cout << "Number of Fours: " << counts[4]; 
    cout << endl; 
    return 0; 
} 
+0

Я считаю, что переменная for и строковая переменная - это то, что я искал, этот ответ дал мне много о чем подумать. Я не могу использовать массивы в этом случае, как я сказал ранее, потому что сейчас он является частью соответствующего материала. Мое единственное последнее беспокойство, если это работает, - это проверить, действительно ли это базовое число 5 перед началом цикла for? Можно ли использовать переменную типа boolean? – Leonhart