Преобразовать телефонный номер (слово или строка) из буквенного представления в цифровое - C (СИ)
Формулировка задачи:
2. Преобразовать телефонный номер (слово или строка) из буквенного представления в цифровое, то есть нужно выполнить замену: • abcABC → 2 • defDEF → 3 • ghiGHI → 4 • jklJKL → 5 • mnoMNO → 6 • pqrsPqRS → 7 • tuvTUV → 8 • wxyzWXYZ → 9 Для замены использовать таблицу.
Решение задачи: «Преобразовать телефонный номер (слово или строка) из буквенного представления в цифровое»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void flush_input(void) {
char c;
while ( scanf("%c", &c) == 1 && c != '\n' )
;
}
const char* TABLE[10] = {
" ",
".,",
"ABC",
"DEF",
"GHI",
"JKL",
"MNO",
"PQRS",
"TUV",
"WXYZ",
};
typedef char PhoneNumber[16];
#define get_phone_number(pn) ( scanf("%15[^\n]", (pn)) == 1 )
#define ERR_MSG "ERROR"
int main(void) {
PhoneNumber input, output;
while ( printf("Number: ") && get_phone_number(input) ) {
int i, complete = 0;
char* pIn = input, * pOut = output;
flush_input();
while ( ! complete ) {
if ( ! *pIn ) {
*pOut = '\0';
complete = 1;
}
else {
for ( i = 0; i < 10; ++i ) {
if ( strchr(TABLE[i], toupper(*pIn)) ) {
*pOut++ = '0' + i;
break;
}
}
if ( i == 10 ) {
strcpy(output, ERR_MSG);
complete = 1;
}
}
++pIn;
}
printf("Call to: %s\n", output);
}
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: stdio.h, string.h и ctype.h
- Определяется функция flush_input, которая используется для очистки входных данных
- Определяется массив TABLE, который содержит соответствия между буквами и цифрами
- Определяется тип данных PhoneNumber, который представляет собой массив из 16 символов
- Определяются макросы get_phone_number и ERR_MSG
- В функции main создаются две переменные типа PhoneNumber: input и output
- В цикле while запрашивается ввод номера и преобразуется в цифровое представление
- Происходит преобразование введенного номера в цифровое представление
- Если номер не соответствует ни одному из кодов в массиве TABLE, то выводится сообщение об ошибке
- Выводится преобразованный номер