Перевод строки из цифр и знаков перед ней в целое число - C (СИ)
Формулировка задачи:
Составить программу, которая переводит строку, состоящую из цифр и возможно из
знаков + или - (в начале строки) в целое число
Решение задачи: «Перевод строки из цифр и знаков перед ней в целое число»
textual
Листинг программы
#include <stdlib.h> #include <stdio.h> #include <string.h> #define MAX_INPUT_LENGTH 100 #pragma pack(1, push) inline char in_array(const char*, char); ptrdiff_t toDec(char*, int&); void controlInput(char*, int&); int input(char*); int main(){ char str[MAX_INPUT_LENGTH]={'\0'}; int start=input(str); controlInput(str, start); system("PAUSE"); } int input(char* str) { fgets(str, MAX_INPUT_LENGTH, stdin); str[strlen(str)-1]='\0'; int start=0; if(str[0]=='-' || str[0]=='+') start=1; return start; } inline char in_array(const char* arr, char key){ for(size_t i = 0; i < strlen(arr); ++i) if(arr[i]==key) return 1; return 0; } void controlInput(char* str, int &start){ while(strlen(str)==1 && start==1) { printf("\nNekorrectno vvedeni dannie!\nVvedite ih echo raz: \n"); start=input(str); } char nums[]="0123456789"; for(size_t i = start; i < strlen(str); ++i){ if(!in_array(nums, str[i])){ printf("\nNekorrectno vvedeni dannie!\nVvedite ih echo raz: \n"); start=input(str); i=start; } } #ifndef _WIN64 printf("\n--------\n%I32d\n", toDec(str, start)); #else printf("\n--------\n%I64d\n", toDec(str, start)); #endif } ptrdiff_t toDec(char* str, int &start){ size_t mnoj=1; ptrdiff_t out=0; for(ptrdiff_t i=strlen(str)-1; i>=start; --i) { out+=(str[i]-48)*mnoj; mnoj*=10; } if( str[0]=='-' ) out*=-1; return out; } #pragma pack(pop)
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: stdlib.h, printf.h и string.h
- Определяются макросы: — MAX_INPUT_LENGTH — максимальная длина вводимой строки — #pragma pack(1, push) — инструкция компилятору о сохранении регистров при вызове функций — #pragma pack(pop) — восстановление предыдущего состояния упаковки регистров
- Определяются три функции: — input — считывает строку из стандартного ввода и возвращает индекс первого непустого символа — controlInput — обрабатывает введенную строку, проверяет корректность ввода и выводит десятичное представление числа — toDec — переводит строку в десятичное число, учитывая знак и масштабирование чисел с плавающей точкой
- Функция main начинается с инициализации строки для ввода и нулевого значения переменной start.
- Ввод строки осуществляется с помощью функции input, которая считывает строку и возвращает индекс первого непустого символа.
- Если первый символ строки — минус или плюс, то значение переменной start устанавливается равным 1.
- В цикле while выполняется проверка корректности введенной строки: если строка содержит только один символ и start равно 1, то выводится сообщение об ошибке и осуществляется повторный ввод строки.
- В цикле for проверяется каждый символ строки на принадлежность к допустимому набору чисел. Если символ не принадлежит к набору, то выводится сообщение об ошибке и осуществляется повторный ввод строки с обновленным значением start.
- Вызывается функция toDec для преобразования строки в десятичное число с учетом знака и масштабирования чисел с плавающей точкой.
- Выводится десятичное представление числа.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д