Я ищу для вычисления четных чисел в заданной строке с C++. Мой код:Подсчет числа четных цифр в номере?
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int i(0), c(0), z(0), j(1), n1, x(0);
string n;
int main()
{
cout << "Hello n world!" << endl;
cin >> n; //The number itself
while (true)
{
if ((n[i] >= '0' && n[i] <= '9'))
{
x++;
}
else break;
i++;
} //Counts the numbers
cout << "The number has " << x << " digit(s)." << endl;
istringstream convert(n);
if (!(convert >> n1))
n1 = 0; //converts string to an int
while (c < x)
{
if (n1 % 2 == 0)
{
z++;
};
n1 = n1 % 10;
c++;
}; //Counts the even numbers (I can feel this part is wrong, I just don't know how)
cout << "The number has" << z << " even digit(s)." << endl;
return 0;
}
Но когда я использую его, когда я вхожу 1022, я получаю 4 даже номера, и если я вхожу 696969 дает 0 четные числа. Что я делаю? Что не так с моим кодом?
Это не сайт, на котором вы просите людей исправить код, который не работает. Вы должны следовать логике своей программы, найти ее часть, которая не делает то, что вы ожидаете, и задавать вопрос о _that_. –
Похоже, вам, возможно, потребуется научиться использовать отладчик для выполнения вашего кода. С хорошим отладчиком вы можете выполнить свою программу по очереди и посмотреть, где она отклоняется от ожидаемого. Это важный инструмент, если вы собираетесь заниматься программированием. Дальнейшее чтение: ** [Как отлаживать небольшие программы] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** – NathanOliver
Этот код слишком усложнен. Подумайте об итерации по строковому символу по символу и использованию десятичных эквивалентных значений из таблицы ASCII. Я могу написать ваш 'main' разборчиво в 7 строках, поэтому стреляйте под 20. – AndyG