Я пытаюсь создать функцию для чтения азбуки Морзе из одного файла, преобразования ее в текст на английском языке, печати преобразованного текста в терминал и записи в выходной файл.Вот грубое начало ...
#define TOTAL_MORSE 91
#define MORSE_LEN 6
void
morse_to_english(FILE* inputFile, FILE* outputFile, char morseStrings[TOTAL_MORSE][MORSE_LEN])
{ int i = 0, compare = 0;
char convert[MORSE_LEN] = {'\0'}, *buffer = '\0';
//read in a line of morse string from file
// fgets(buffer, //then what?
while(((convert[i] = fgetc(inputFile)) != ' ') && (i < (MORSE_LEN - 1)))
{ i++;
}
if (convert[i + 1] == ' ')
convert[i + 1] = '\0';
//compare read-in string w/morseStrings
for (i = 48, compare = strcmp(convert, morseStrings[i]); //48 is '0'
i < (TOTAL_MORSE - 1) && compare != 0;
i++)
{ compare = strcmp(convert, morseStrings[i]);
}
printf("%c", (char)i);
}
Я инициализировал morseStrings для кода Морзе.Это моя функция прямо сейчас.Это не работает, и я не совсем уверен, какой подход выбрать.
Мой первоначальный план алгоритма был примерно таким:
1. Scan Morse code in from file, character by character, until a space is reached
1.1 save to a temporary buffer (convert)
2. loop while i < 91 && compare != 0
compare = strcmp(convert, morseString[i])
3. if (test ==0) print ("%c", i);
4. loop through this until eof
но .. Я не могу придумать хороший способ проверить, является ли следующий символ в файле пробелом.Так что это сделало это очень трудным для меня.
Я был довольно разочарован и гуглил на идеи, и нашел предложение использовать этот алгоритм
- Читать строку
Петля
-strchr () для пробела или EOL -копировать символы перед пробелом в другую строку
-Использовать strcmp () и цикл, чтобы найти букву -Проверить следующий символ для пробела.
-Если вывести другойпробел -Переход к следующему символу Морзе
Элемент списка
Endloop
Но этот цикл немного запутан.Я бы использовал fgets () (я думаю), но я не знаю, что указать в аргументе длины.
В любом случае, я устал и расстроен.Я был бы признателен за любую помощь или понимание этой проблемы.Я могу предоставить больше кода, если это необходимо.