Подсчитать наибольшее количество идущих подряд цифр (С++)
Нужно подсчитать наибольшее кол-во цифр в задаваемом тексте. Думаю делать так: проверять каждый символ на то, цифра ли это, подсчитать цифры до символа-не цифры, записывая максимальное полученное кол-во в отдельную переменную и перезаписывать её каждый раз, когда найдётся большее количество, в конце вывести эту переменную как результат. Написал нижеследующую программу, но выдаёт ошибку lvalue required as left operand of assignment
#include <iostream>
#include <cstring>
#include <windows.h>
using namespace std;
int main()
{
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
string a;
int i, x = 0, xmax = 0;
cout << "Введите предложение: " << endl;
getline(cin, a);
for (i=0; i < a.npos; i++)
{
if (a[i]='1' or a[i]='2' or a[i]='3' or a[i]='4' or a[i]='5' or a[i]='6' or a[i]='7' or a[i]='8' or a[i]='9' or a[i]='0')
{
x++;
}
else
{
x=0;
}
if (x>xmax)
{
xmax=x;
}
}
cout << "Наибольшее кол-во чисел, идущих подряд: " << x << endl;
system("pause");
return 0;
}
Ответы (1 шт):
В C++ логическое или реализовано как "||", а логическое и как "&&". Также вопрос, зачем использовать npos, если можно использовать lenght? Если углубиться в неявные преобразования типов, то можно вспомнить, что символ можно представить и в числовом эквиваленте. И наконец, вместо x нужно вывести xmax, так как x является промежуточной переменной
Наиболее удачным решением будет следующее
#include <iostream>
#include <cstring>
#include <windows.h>
using namespace std;
int main()
{
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
string a;
int x = 0, xmax = 0;
cout << "Введите предложение: " << endl;
getline(cin, a);
for (int i = 0; i < a.length(); i++) {
if (a[i] >= '0' && a[i] <= '9') {
x++;
}
else {
x = 0;
}
if (x > xmax) {
xmax = x;
}
}
cout << "Наибольшее кол-во чисел, идущих подряд: " << xmax << endl;
system("pause");
return 0;
}