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

Программирование на языке C.

soban Знаток (418), на голосовании 5 месяцев назад
Разработайте функцию, принимающую на вход строку и выполняющую поиск самой длинной последовательности из расположенных в алфавитном порядке латинских букв (“abc – 3, deabd - 2”).
Голосование за лучший ответ
Сергей Бивис Мастер (1587) 6 месяцев назад
 #include  
#include

// Функция для поиска самой длинной алфавитной последовательности
void longestAlphabeticalSequence(const char *str, char *result) {
int maxLength = 0; // Длина самой длинной последовательности
int maxStart = 0; // Начальный индекс самой длинной последовательности

int currentLength = 1; // Текущая длина последовательности
int currentStart = 0; // Текущий начальный индекс последовательности

int n = strlen(str); // Длина строки

for (int i = 1; i < n; ++i) {
if (str[i] >= str[i - 1]) {
currentLength++;
} else {
if (currentLength > maxLength) {
maxLength = currentLength;
maxStart = currentStart;
}
currentLength = 1;
currentStart = i;
}
}

// Проверка последней последовательности
if (currentLength > maxLength) {
maxLength = currentLength;
maxStart = currentStart;
}

// Копирование самой длинной последовательности в результат
strncpy(result, &str[maxStart], maxLength);
result[maxLength] = '\0'; // Завершающий нулевой символ
}

int main() {
const char *input = "deabcdeabxyzabcdefg";
char result[100]; // Буфер для хранения результата

longestAlphabeticalSequence(input, result);
printf("Самая длинная алфавитная последовательность: %s\n", result);

return 0;
}
Роман ДаниловМудрец (10916) 6 месяцев назад
у меня в вашем коде для последовательности dasd показало as, тогда как это не в алфавитном порядке, а прыжок через много букв
Роман Данилов Мудрец (10916) 6 месяцев назад
 #include  
#include
#include

bool in_az(char c) {
for (char i='a'; i<='z'; i++) {
if (c==i) return true;
}
return false;
}

int main() {
printf("Программа для поиска упорядоченных подстрок строки a..z\n");
char str[255];
printf("Введите строку: ");
scanf("%s", str);
int i_1;
int l_1;
int i_max;
int l_max;
if (strlen(str)==1) {
if (in_az(str[0])) {
i_1=0; l_1=1;
i_max=0; l_max=1;
} else {
i_1=0; l_1=0;
i_max=0; l_max=0;
}
} else {
// если первый символ в a..z
if (in_az(str[0])) {
i_1=0; l_1=1;
i_max=0; l_max=1;
} else {
i_1=0; l_1=0;
i_max=0; l_max=0;
}

for (int i=1; i if (in_az(str[i])) {
if (l_1 > 0) {
if (str[i]==(str[i_1+l_1-1]+1)) {
l_1++;
if (l_1 >= l_max) {
l_max=l_1; i_max=i_1;
}
} else {
if (l_1 >= l_max) {
l_max=l_1; i_max=i_1;
}
i_1=i; l_1=1;
}
} else {
i_1=i; l_1=1;
if (l_1 >= l_max) {
l_max=l_1; i_max=i_1;
}
}
} else {
i_1=i; l_1=0;
}
}
}
if (l_max>0) {
for (int i=0; i if (i==i_max) {
printf("[");
}
printf("%c",str[i]);
if (i==(i_max+l_max-1)) {
printf("]");
}
}
} else {
printf("Искомая строка не найдена!\n");
return 1;
}
return 0;
}
удалил все комментарии, т.к. с ними не помещалось на ответы. надеюсь, не удалил ничего лишнего
Похожие вопросы