@mxr

Корректно ли сравнивать цифры объявленные как строки, т.е объектом string?

Могут ли быть какие-то проблемы(потеря данных, т.е округление и т.п), при подобном сравнении.
Как в ситуации ниже, поступает компилятор?

int main() {

	string num_in_str = "100.05";
	string num_in_str2 = "100.03";

	if (num_in_str < num_in_str2) {
		// ...
	}

        return 0;
}
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Как в ситуации ниже, поступает компилятор?

Компилятор вставляет вызов string::operator <. Если это std::string, то оператор выполняет лексикографическое сравнение, т.е. сравнивает символы обеих строк по очереди до первой различающейся пары, меньшей будет та строка, которой принадлежит символ с меньшим кодом.
В примере "100.05" < "100.03" результат будет false потому что 5 > 3.

Могут ли быть какие-то проблемы

Для такого сравнения строковые представления чисел должны начинаться разрядами одного веса. Т.е. можно сравнивать "100.05" и "099.1" (первая цифра и слева и справа -- сотни), но нельзя сравнивать "100.05" и "99.1" (слева первая цифра -- сотни, справа -- десятки).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы