#include <iostream>
#include <string>
using namespace std;
class Nnumber : std::unary_function<char, bool>{
static int k;
public:
bool operator ()(char ch) {
if (isdigit(ch))
return false;
if ( ch == ',' || ch == '.') {
++k;
if(k < 2)
return false;
else
return true;
}
return true;
}
};
int Nnumber::k = 0;
void remake(string& s) {
s.erase(remove_if(s.begin(), s.end(), Nnumber()), s.end());
}
int main(int argc, char *argv[])
{
QCoreApplication qca(argc, argv);
string s("123, rt45,6j"), s1("567,.. 87");
remake(s);
remake(s1);
cout << s <<'\n' // "123,457"
<< s1; // "56787" ??? нет символа ','
return qca.exec();
}
Мне нужно чтобы строка представляла рациональное число произвольной длины, а для этого пытаюсь исключать любой попавший там ненужный символ. Я ожидал, что s1 == "567,87", однако это не так. Никак не разобрался в чем ошибка. Помогите пожалуйста исправить
Логично, потому что k - у Вас статическая переменная, и между разными вызовами ее значение сохраняется. Не забывайте её обнулять и все будет ок.
P.S.
код вида
if(k < 2)
return false;
else
return true;
лучше заменить на
return (k>=2);
?
#include <iostream>
#include <string>
using namespace std;
class Nnumber : std::unary_function<char, bool>{
public:
Nnumber(): k(0) {}
bool operator ()(char ch) {
if (isdigit(ch))
return false;
if ( ch == ',' || ch == '.') {
++k;
if(k < 2)
return false;
else
return true;
}
return true;
}
};
void remake(string& s) {
s.erase(remove_if(s.begin(), s.end(), Nnumber()), s.end());
}
int main(int argc, char *argv[])
{
QCoreApplication qca(argc, argv);
string s("123, rt45,6j"), s1("567,.. 87");
remake(s);
remake(s1);
cout << s <<'\n' // "123,457"
<< s1; // "56787" ??? нет символа ','
return qca.exec();
}
struct Nnumber : std::unary_function<char, bool>{
static int k;
bool operator ()(char ch) {
if (isdigit(ch))
return false;
if ( ch == ',' || ch == '.') {
++k;
return k >= 2;
}
return true;
}
};
int Nnumber::k = 0;
void remake(string& s) {
s.erase(remove_if(s.begin(), s.end(), Nnumber()), s.end());
Nnumber::k = 0;
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Всем приветСкажите пожалуйста как сделать обновление программы JavaFX desktop? Делать обновления с Ftp
Привет на данный момент структура моего проекта выглядит так
Во многих приложениях есть такая функция в меню,когда телефон подключен к интернету,вместе с основными кнопками,допустим в каком нибудь...
Ситуация заключается в том, что в приложении исправно работает только один режим, при котором если поступает звонок, музыка прекращает игратьПри...