c ++ Валидация двойного в строке

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

Вот мой код:

string input;
bool valid;
double num;

//Verification of valid inputs
do
{
valid = true;
cout << "What is the " << name << " rate of the population? (% per year): ";
getline(cin, input);
num = input.length();

if (num == 0)
{
cout << "\nNo data was entered, please enter a number.\n";
valid = false;
}
else
{
for (double i = 0; i < num; i++)
{
if (input.at(i) < '0' || input.at(i) > '9')
{
cout << "\nPlease enter a valid, positive number.\n";
valid = false;
break;
}
}
}
} while (valid == false);
return stod(input);

Благодарю.

Редактировать:
Я только что нашел это Как проверить, что строка является допустимой двойной (даже если в ней есть точка)? и я могу с уверенностью сказать, что понятия не имею, что происходит.

1

Решение

Если вы действительно хотите сделать это вручную, взгляните на следующие методы:

Как вручную разобрать число с плавающей запятой из строки

https://www.daniweb.com/programming/software-development/code/217315/c-function-stod-string-to-double-convert-a-string-to-a-double

и читать комментарии. Это не совсем просто, но это должно сработать. Или, что еще лучше, проверьте код stod из C ++.

0

Другие решения

Почему вы используете double в качестве индекса для строки? Кроме того, я бы пропустил, используя ++ для увеличения в два раза.

0

Догадаться.

Просто нужно было что-то добавить в оператор if.

 if ((input.at(i) < '0' || input.at(i) > '9') && input.at(i) != '.')
{
cout << "\nError! illegal character was entered.\n";
valid = false;
break; // 12w345

if (input.at(i) == '.')
ct++;

if (ct > 1)
{
cout << "Error! Only one dot allowed.";
valid = false;

С ct является целым числом со значением 0, чтобы подсчитать точки и убедиться, что была введена только одна.

0
По вопросам рекламы [email protected]