Рекурсия: проверить, является ли строка 16-ной записью числа и вернуть 10-ое значение - C (СИ)
Формулировка задачи:
помогите сделать программу с рекурсией, без смог сделать, а с рекурсией не получается
Задание: сделать функцию которая проверяет символьный рядок есть ли он 16-ным кодом и возвращает 10-ое значение, если нет то -1, з клавиатуры нужно ввести последовательность символьных рядков из 16-ми кодами
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
void isHex(char *r)
{
int i=0, j=0, k;
char *z, *f;
if(r==NULL) return;
while(i<strlen(r))
{
z=r[i];
if(isdigit(z))
{
k=atoi(&z);
j=j*16+k;
i++;
}
else if(z=='a'||z=='A')
{
k=10;
j=j*16+k;
i++;
}
else if(z=='b'||z=='B')
{
k=11;
j=j*16+k;
i++;
}
else if(z=='c'||z=='C')
{
k=12;
j=j*16+k;
i++;
}
else if(z=='d'||z=='D')
{
k=13;
j=j*16+k;
i++;
}
else if(z=='e'||z=='E')
{
k=14;
j=j*16+k;
i++;
}
else if(z=='f'||z=='F')
{
k=15;
j=j*16+k;
i++;
}
else
{
j=-1;
i=strlen(r);
}
}
printf("%d\n", j);
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char SymbStr[100];
printf("Введіть послідовність символьних рядків: \n");
gets(SymbStr);
char *pch=strtok(SymbStr," ,.-");
while (pch!='\0')
{
printf("%s - ", pch);
isHex(pch);
pch = strtok(NULL, " ,.-");
}
return 0;
}Решение задачи: «Рекурсия: проверить, является ли строка 16-ной записью числа и вернуть 10-ое значение»
textual
Листинг программы
if ('a' <= z && z <= 'f') k = 10 + z - 'a';
else if ('A' <=z && z<='F') k = 10 +z - 'A';
else // Error
Объяснение кода листинга программы
- Проверяется, является ли символ
zзаглавной буквой от 'A' до 'F' (включительно). - Если это так, то
kприсваивается значение 10 +z- 'A'. - Иначе, проверяется, является ли символ
zстрочной буквой от 'a' до 'f' (включительно). - Если это так, то
kприсваивается значение 10 +z- 'a'. - Иначе, выполняется действие, помеченное как
// Error.