У меня проблема с кодом в C. Мне нужно ввести список имен, разделенных кнопкой ввода. Вход останавливается, когда пользователь вводит слово «QUIT». программе необходимо распечатать список имен в алфавитном порядке (все буквы строчные).Динамическое распределение массива указателей
Количество имен, а также длина каждого имени неизвестны и должны быть динамически распределены. Кроме того, если имя появляется более одного раза на входе, оно должно появляться только один раз на выходе.
вот пример того, как код должен работать:
Please enter a list of names:
john
chris
ben
chris
david
QUIT
Есть 4 названия:
ben
chris
david
john
Я думал об использовании динамически назначаемый массив указателей, в котором каждый указатель содержит каждый имя и динамическое выделение. Проблема в том, что я не знаю, как написать его, не получив ошибку во время выполнения.
Примечание: на данный момент мне не разрешено использовать вещи, которые я еще не изучил, например, структуры и рекурсии, и могут использовать только библиотеки stdio.h, stdlib.h и string.h.
Заранее спасибо.
вот код (это не полный, но я получаю сообщение об ошибке выполнения на данный момент):
char **nameList;
int i = 0, j = 0, size = 0, check = 0;
printf("Please enter list of names:\n");
//allocate one cell of memory to the list
nameList = (char**)malloc(sizeof(char));
if (nameList == NULL)
{
printf("Cannot allocate Memory");
return 0;
}
//Add the first letter to the first string in the array
nameList[i][j] = getchar();
size += sizeof(char);
while (check != 1)
{
//check if current entered letter is not an enter
while (nameList[i][j] != '\n')
{
//allocated another char sized memory to the string
nameList = (char**)realloc(nameList, (size + sizeof(char)));
if (nameList == NULL)
{
printf("Cannot allocate Memory");
return 0;
}
j++;
//adding another char to the current string
nameList[i][j] = getchar();
size += sizeof(char);
}
j = 0;
if (nameList[i][j] == 'Q')
{
if (nameList[i][j + 1] == 'U')
if (nameList[i][j + 2] == 'I')
if (nameList[i][j + 3] == 'T')
check++;
}
i++;
}
Пожалуйста, прочитайте [ask] и [mcve]. Вы упоминаете ошибку времени выполнения, какой код это вызывает? Мы можем помочь с конкретными проблемами, которые вы попытались исправить, но Stack Overflow не является службой написания кода. – whrrgarbl
Хорошо, вы должны иметь возможность сделать это с динамическим распределением массива указателей и строк. Поэтому вы должны показать текущий код и вашу ошибку. –
Я буду голосовать за любой ответ, который лишает этого ученика его возможности учиться. –