Advertisement
Dimava

3-1

Mar 27th, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.24 KB | None | 0 0
  1. // Задание 3-1
  2. // Пользователь вводит в консоли шестнадцатеричное число. Напишите программу, которая
  3. // преобразует строку в число. Перевод строки в число необходимо оформить в виде
  4. // функции. Допустимые символы: 0-9, a-f, A-F. Пользоваться решениями на основе
  5. // стандартной библиотеки не разрешается.
  6.  
  7. #include <stdio.h>
  8.  
  9. #define str_maxlen 100
  10.  
  11. void str_read(char s[], char end) {
  12.     int i = 0;
  13.     while ((s[i] = getchar()) != end && s[i] != EOF)
  14.         i++;
  15.     s[i] = '\0';
  16. }
  17.  
  18. //////////////////////////////////////////////////
  19.  
  20. int hexNumber(char c) {
  21.     if (c >= '0' && c <= '9') return c - '0';
  22.     if (c >= 'a' && c <= 'f') return c - 'a' + 10;
  23.     if (c >= 'A' && c <= 'F') return c - 'f' + 10;
  24.     return -1;
  25. }
  26.  
  27. int str_parse_hex(char s[]) {
  28.     int n = 0, d, i=0;
  29.     while ((d = hexNumber(s[i])) != -1) {
  30.         n = 16 * n + d;
  31.         i++;
  32.     }
  33.     return n;
  34. }
  35.  
  36. int main() {
  37.     printf("0x");
  38.     char s[str_maxlen];
  39.     str_read(s, '\n'); // reads to newline! no EOF required!
  40.     int n = str_parse_hex(s);
  41.     printf("0x%s is %d\n", s, n);
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement