Задача на алгоритмы. Работа со строками - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток! Передо мной стоит достаточно нетривиальная задача. Кому интересно прошу помочь. Задача: На входе: у нас строка, которая содержит пробелы (работать нужно не со string, а только с char), также эта строка содержит числа в десятичной системе исчисления. На выходе: точно эта же строка, только в ней все числа десятичной системы исчисления заменены на эти же числа только представленные в шестнадцатеричной системы исчисления. Условия: нельзя пользоваться никакими стандартными функциями и библиотеками. Все так сказать "в ручную". Я собственно говоря написал код, который находит в строке все числа десятичной системы исчисления, формирует новую строку из этих чисел в шестнадцатеричной системе исчисления. Но эта строка без пробелов и содержит только числа. Как работает мой код: На входе: 44ssf44fffff4ddd4; На выходе: Ox6C81C А как должно быть: На входе: aaaa 444444ffffff dddd; На выходе: aaaa Ox6C81Cffffff dddd; Моя реализация:
Листинг программы
  1. #include <stdio.h>
  2.  
  3. void inputChar(char *str)
  4. {
  5. printf("input array char <100: ");
  6. scanf("%s", str);
  7. }
  8. void revers(char *A)
  9. {
  10. int j;
  11. for (j = 0; A[j] != '\0'; j++);
  12. j--;
  13. for (int i = 0; i <j; i++, j--)
  14. {
  15. char temp = A[i];
  16. A[i] = A[j];
  17. A[j] = temp;
  18. }
  19. }
  20. int charToDecInt(char *A)
  21. {
  22. int summ = 0;
  23. for (int i = 0; A[i] != '\0'; i++)
  24. {
  25. if (A[i] >= '0' && A[i] <= '9')
  26. {
  27. summ *= 10;
  28. summ += A[i] - '0';
  29. }
  30. }
  31. return summ;
  32. }
  33. void decIntTohexString(int a, char *A)
  34. {
  35. int j = 0;
  36. while (a != 0)
  37. {
  38. int r = a % 16;
  39. if (r > 9)
  40. {
  41. r += 'A' - 10;
  42. }
  43. else
  44. {
  45. r += '0';
  46. }
  47. A[j++] = r;
  48. a /= 16;
  49. }
  50. A[j] = '\0';
  51. revers(A);
  52. }
  53. void display()
  54. {
  55. const int N = 100;
  56. char A[N] = "";
  57. char B[N] = "";
  58. inputChar(A);
  59. int a = charToDecInt(A);
  60. decIntTohexString(a, B);
  61. printf("hexChar = Ox%s\n", B);
  62. }
  63. int main()
  64. {
  65. display();
  66. return 0;
  67. }
Буду очень благодарен за помощь!

Решение задачи: «Задача на алгоритмы. Работа со строками»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <locale.h>
  3.  
  4. int strLen(char *S)
  5. {
  6.     int n;
  7.     for (n = 0; S[n] != '\0'; n++);
  8.     return n;
  9. }
  10. void revers(char *A)
  11. {
  12.     int j;
  13.     for (j = 0; A[j] != '\0'; j++);
  14.     j--;
  15.     for (int i = 0; i <j; i++, j--)
  16.     {
  17.         char temp = A[i];
  18.         A[i] = A[j];
  19.         A[j] = temp;
  20.     }
  21. }
  22. void digitDecToHexString(int digit, char *T)
  23. {
  24.     int j = 0;
  25.     while (digit != 0)
  26.     {
  27.         int r = digit % 16;
  28.         if (r >= 1 && r <= 9)
  29.         {
  30.             r += '0';
  31.         }
  32.         else
  33.         {
  34.             r += 'A' - 10;
  35.         }
  36.         T[j++] = r;
  37.         digit /= 16;
  38.     }
  39.     T[j] = '\0';
  40.     revers(T);
  41. }
  42. void intDecToCharHex(char *A, char *B)
  43. {
  44.     int n = strLen(A);
  45.     char Hex[1000] = "";
  46.     int i = 0;
  47.     int j = 0;
  48.     int k = 0;
  49.     int v = 0;
  50.     int p = 0;
  51.     for(i = 0; i<n; i++)
  52.     {
  53.         if ('0' <= A[i] && A[i] <= '9')
  54.         {
  55.             v = v * 10 + (A[i] - '0');
  56.             k = 1;
  57.         }
  58.         else
  59.         {
  60.             if (k == 1)
  61.             {
  62.                     digitDecToHexString(v, Hex);
  63.                     B[j++] = '0';
  64.                     B[j++] = 'x';
  65.                     for (p = 0; p < strLen(Hex); p++)
  66.                     {
  67.                        B[j++] = Hex[p];
  68.                     }
  69.             }
  70.             B[j++] = A[i];
  71.             k = 0;
  72.             v = 0;
  73.         }
  74.     }
  75.     if (k == 1)
  76.     {
  77.         digitDecToHexString(v, Hex);
  78.         B[j++] = '0';
  79.         B[j++] = 'x';
  80.         for (p = 0; p < strLen(Hex); p++)
  81.         {
  82.              B[j++] = Hex[p];
  83.         }
  84.     }
  85. }
  86. void inputCharArray(char *S)
  87. {
  88.     printf("Введите строку на латинском алфавите размерностью мене 1000 символов: \n");
  89.     scanf("%[^\n]s", S);
  90. }
  91. void display()
  92. {
  93.     char A[1000] = { '\0' };
  94.     inputCharArray(A);
  95.     char B[1000] = "";
  96.     intDecToCharHex(A, B);
  97.     printf("Входная строка: \n%s\n", A);
  98.     printf("Строка после обработки: \n%s\n", B);
  99.    
  100. }
  101. int main()
  102. {
  103.     setlocale(LC_ALL, "Rus");
  104.     display();
  105.     return 0;
  106. }

Объяснение кода листинга программы

  1. В функции strLen инициализируется переменная n равной 0.
  2. В функции revers инициализируется переменная j равной 0.
  3. В функции digitDecToHexString используется переменная r для хранения остатка от деления числа на 16.
  4. В функции intDecToCharHex инициализируется переменная n равной 0.
  5. В функции intDecToCharHex инициализируется массив Hex размером 1000 символов со значением пустой строки ````.
  6. В функции intDecToCharHex инициализируется переменная k равной 0.
  7. В функции intDecToCharHex инициализируется переменная v равной 0.
  8. В функции intDecToCharHex инициализируется переменная p равной 0.
  9. В функции inputCharArray выводится запрос на ввод строки.
  10. В функции display создается пустой массив A размером 1000 символов.
  11. В функции display вызывается функция inputCharArray для ввода строки в массив A.
  12. В функции display создается пустой массив B размером 1000 символов.
  13. В функции display вызывается функция intDecToCharHex для преобразования строки из массива A в массив B.
  14. В функции display выводится на экран входная строка из массива A.
  15. В функции display выводится на экран обработанная строка из массива B.
  16. В функции main устанавливается локальная настройка на русский язык с помощью setlocale.
  17. В функции main вызывается функция display.
  18. В функции main возвращается 0, что означает успешное выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы