Advertisement
SSiluRS

F27

Jan 14th, 2020
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.23 KB | None | 0 0
  1. void f27(char c[], char cc[]) {//c - исходная строка; сс - новая
  2.     int ii = 0; // индекс который идет по новой строке, просто i идет по исходной
  3.     for (int i = 0; c[i] != 0; i++)//цикл по исходной строке
  4.     {
  5.         cc[ii] = c[i]; //в новую строку записываем символы из старой
  6.         if (c[i] >= 'A' && c[i] <= 'Z') //если заглавная
  7.         {
  8.             char b[] = "0123456789ABCDEF"; //так как в 16сс после девтяки идут буквы, а при переводе из 10сс в 16сс мы получаем числа,
  9.                                           //нужно их как-то заменить, для этого данный массив(пример: если у нас получилось 12, то в строку мы записываем b[12] = С)
  10.             int digit = c[i]; //запоминаем код заглавной буквы
  11.             int x2;
  12.             char z[8] = ""; //массив для хранения 16ричной записи кода заглавной буквы
  13.             cc[ii] = '0'; cc[ii+ 1] = 'x'; //записываю в новую строку на место заглавной буквы "0x"
  14.             ii += 2; //перемещаем индекс вправо на 2 символа так как ввели два символа "0x"
  15.             //цикл перевода из 10сс в 16сс
  16.             for (int j = 0; j < 2; j++)
  17.             {
  18.                 x2 = digit / 16;
  19.                 z[j] = digit - (x2 * 16) + '0';
  20.                 digit = x2;
  21.             }
  22.             int j;
  23.             //цикл замены чисел больше 9 на буквы из 16сс
  24.             for (j = 0; z[j] != 0; j++)
  25.             {
  26.                 z[j] = b[z[j] - '0'];
  27.  
  28.             }
  29.             //переворачиваю строку по правилу перевода из 10сс в 16сс, сразу же записывая в новую строку(k идет с конца числа к началу, ii идет по новой строке)
  30.             for (int k = j-1; k >= 0; k--)
  31.             {
  32.                 cc[ii] = z[k];
  33.                 ii++;
  34.             }
  35.             ii--;//так как перед выходом из предыдущего цикла мы увеличили ii, нужно его уменьшить, чтобы не пропустить символ
  36.         }
  37.         ii++;
  38.     }
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement