Преобразование строки в целое число (atoi)
Привет, друзья!
Возвращаемся к вам после небольшого перерыва с разбром новой задачи.
Сложность: 🟡 Средняя
ℹ️ Описание
Реализуйте функцию myAtoi(string s), которая преобразует строку в 32-битное знаковое целое число.
Функция должна следовать следующим правилам при чтении строки:
— Пропустить любые ведущие пробелы
— Проверить наличие знака (+ или -)
— Читать следующие символы до тех пор, пока они составляют последовательность цифр.
— Преобразовать эти цифры в целое число.
— Если первая непустая последовательность символов не является допустимым целым числом, вернуть 0.
— Если полученное значение превышает диапазон 32-битного знакового целого числа, вернуть INT_MAX (2^31 - 1) или INT_MIN (-2^31).
⚠️ Ограничения
— Длина строки находится в диапазоне от 0 до 200
— Строка s состоит из английских букв (как заглавных, так и строчных), цифр, пробелов и знаков «+», «-» и «.»
1️⃣ Пример
Входные данные: "42"
Ответ: 42
2️⃣ Пример
Входные данные: " -42"
Ответ: -42
3️⃣ Пример
Входные данные: "4193 with words"
Ответ: 4193
4️⃣ Пример
Входные данные: "words and 987"
Ответ: 0
5️⃣ Пример
Входные данные: "-91283472332"
Ответ: -2147483648
✅ Решение
Для того чтобы преобразовать строку в число, нам необходимо проитерироваться по всем символам в строке, проверяя все необходимые условия.
В первую очередь нужно пропустить все ведущие пробелы в строке. Для этого запустим цикл типа while и будем увеличивать переменную index для определения позиции, откуда надо начинать преобразование числа.
После этого нам нужно проверить присутствует ли в строке определение знака числа. Для этого заведем переменную sign.
— Если встречаем в строке символ +, то устанавливаем значение sign равным 1.
— Если встречаем в строке символ -, то устанавливаем значение sign равным -1.
— Если в строке присутствовал знак числа, то еще необходимо увеличить index на единицу.
Теперь осталось преобразовать оставшиеся символы в число. Чтобы проверить, является ли символ в строке числом без приведения типов можно воспользоваться маленьким хаком и сравнивать его со строками.
— Если char < "0" или char > "9", то символ не является числом. Как только мы встретили не числовой символ в строке, то дальнейший разбор необходимо прекратить.
—Если смвол является числом, то его необходимо добавить к результирующему числу. Для этого надо воспользоваться следующей формулой res = res * 10 + char - '0'. Это позволяет прибавить цифру справа к существующему числу.
После этих операций необходимо проверить, превысило ли число минимальное или максимальное значение.
— Если превышено максимальное значение, то в качестве ответа надо вернуть максимальное.
— Если превышено минимальное значение, то в качестве ответа надо вернуть минимальное.
В заключение, в ответе нужно вернуть res умноженный на знак sign.
Посмотреть реализацию в блоге.
#string #medium
Post #110
1.31K