Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Требуется помощь в дописании кода, преобразовать по правилу слова, на языке C

MagicS1awe Ученик (115), открыт 4 дня назад
Дана строка, содержащая от 1 до 30 слов, в каждом из которых от 1 до 10 латинских букв и/или цифр; между соседними словами - не менее одного пробела, за последним словом - точка. Напечатать все слова, отличные от последнего слова, предварительно преобразовав каждое из них по следующему правилу: удалить из слова все предыдущие вхождения последней буквы.

#include <stdio.h>
#include <string.h>

char *func(char *str);
char *lastWord(char *str);

int main(void)
{
char inputText[] = "my apple my orange my";
char *lastW = lastWord(inputText), *slovo = strtok(inputText, " ");


while (slovo != NULL)
{
if (strcmp(slovo, lastW) != 0)
puts(func(slovo));

slovo = strtok(NULL, " ");
}


return 0;
}

char *lastWord(char *str)
{
int i = strlen(str)-1;

while (str[i] == ' ')
i--;

while (str[i] != ' ')
i--;

return str + i + 1;
}
char *func(char *str)
{

}
1 ответ
GGG Просветленный (34824) 4 дня назад
 #include <stdio.h> 
#include <string.h>
#include <stdlib.h>

char *func(char *str);
char *lastWord(char *str);

int main(void)
{
char inputText[] = "my apple my orange my."; // Добавлена точка в конце строки
char *lastW = lastWord(inputText), *slovo = strtok(inputText, " ");

while (slovo != NULL)
{
// Удаляем точку из последнего слова, если она есть
if (strchr(slovo, '.') != NULL) {
*strchr(slovo, '.') = '\0';
}

if (strcmp(slovo, lastW) != 0)
puts(func(slovo));

slovo = strtok(NULL, " ");
}

return 0;
}

char *lastWord(char *str)
{
int i = strlen(str) - 1;

// Пропускаем точку в конце строки
if (str[i] == '.') {
i--;
}

while (str[i] == ' ')
i--;

int end = i;

while (i >= 0 && str[i] != ' ')
i--;

// Выделяем память для копии последнего слова и копируем его
char* lastWordCopy = (char*)malloc((end - i) + 1);
if (lastWordCopy == NULL) {
fprintf(stderr, "Memory allocation failed\n");
exit(1);
}
strncpy(lastWordCopy, str + i + 1, end - i);
lastWordCopy[end - i] = '\0';

return lastWordCopy;
}

char *func(char *str)
{
int len = strlen(str);
if (len == 0)
return str;

char lastChar = str[len - 1];
char *result = (char*)malloc(len + 1);
if (result == NULL) {
fprintf(stderr, "Memory allocation failed\n");
exit(1);
}

int j = 0;
for (int i = 0; i < len; i++)
{
if (str[i] != lastChar || i == len - 1)
{
result[j++] = str[i];
}
else
{
// Проверяем, есть ли ещё вхождения последней буквы
int found = 0;
for (int k = i + 1; k < len; k++)
{
if (str[k] == lastChar)
{
found = 1;
break;
}
}
if (found || i == len - 1)
{
result[j++] = str[i];
}
}
}
result[j] = '\0';
return result;
}
MagicS1aweУченик (115) 4 дня назад
неправильный код, не соблюдает последнее условие
Похожие вопросы