Member 13413799 Ответов: 3

C программа для длины самого длинного прогона в строке


В строке "run" - это подстрока, состоящая из последовательных
случаи одного и того же характера. Например, строка
"Миссисипи" содержит следующие прогоны - "ss", "ss"и " pp".

В этом вопросе, учитывая строку, вы должны вывести длина
самый длинный пробег в цепочке.


Ввод
-----
Строка, имеющая длину не более 100. Строка гарантированно будет иметь
по крайней мере, один заход.

Выход
------
Длина самого длинного пробега в строке.

Пример Ввода
------------
abbaaacccc

Пример Вывода
-------------
4

Что я уже пробовал:

#include<stdlib.h>
#include< stdio.h>
#include & lt;string.h>
#определить NO_OF_CHARS 256

int min(int a, int b);

int longestUniqueSubsttr(char *str)
{
int n = strlen(str);
int cur_len = 1; / / длина текущей подстроки
int max_len = 1; / / результат
int prev_index; / / предыдущий индекс
int i;
int * visited = (int *)malloc(sizeof(int)*NO_OF_CHARS);

/ * Инициализируйте посещенный массив как -1, -1 используется для
укажите, что персонаж еще не был посещен. */
for (i = 0; i & lt; NO_OF_CHARS; i++)
посещенный[i] = -1;

/ * Отметьте первый символ как посещенный, сохранив индекс
первого символа в посещенном массиве. */
посещенный[str[0]] = 0;

/ * Начните со второго символа. Первый символ-это
уже обработано (cur_len и max_len инициализируются
как 1, так и visited[str [0]] устанавливается */
для (i = 1; i < n; i++)
{
prev_index = посетил[стр[я]];

/* Если символ currentt отсутствует в
уже обработанная подстрока или она не является частью
текущие NRCS, затем сделайте cur_len++ */
если (prev_index == -1 || Я - cur_len &ГТ; prev_index)
cur_len++;

/* Если текущий символ присутствует в текущий момент
рассмотрите NRCS, а затем обновите NRCS, чтобы начать с
следующий символ предыдущего экземпляра. */
еще
{
/ * Кроме того, когда мы меняем NRCS, мы
следует также проверить, является ли длина
предыдущий NRCS был больше max_len или
нет.*/
если (cur_len &ГТ; max_len)
max_len = cur_len;

cur_len = я - prev_index;
}

// обновить индекс текущего символа
посетил[str[i]] = i;
}

// Сравните длину последних NRCS с max_len и
// при необходимости обновите max_len
если (cur_len &ГТ; max_len)
max_len = cur_len;

free (visited); / / свободная память, выделенная для посещения
вернуться max_len;
}

/* Функция полезности для получения как минимум двух целых чисел */
int min(int a, int b)
{
возврат (a> b)?b:a;
}

/* Программа драйвера для тестирования вышеуказанной функции */
тап_п()
{
char str [] = " ABDEFGABEF";
printf ("входная строка %s n", str);
int len = longestUniqueSubsttr(str);
printf ("длина самого длинного неповторяющегося "
"символьная подстрока - %d", len);
возвращает 0;
}

Patrice T

В чем вопрос?

xyz123123123123123123

если вы получите решение, то разместите его здесь, пожалуйста

OriginalGriff

Итак, вы учитесь в одном классе с ним и хотите скопировать одно и то же решение с общедоступного веб-сайта, о котором ваш учитель хорошо знает, как и он, и вы оба передаете его как свою собственную работу?
Какая часть этой идеи показалась вам лучшей, чем попытка сделать это самостоятельно?

Dave Kreskowiak

Отлично! Затем, когда вы и ваш одноклассник сдадите один и тот же код для задания, вы оба можете провалить задание вместе, потому что будет совершенно очевидно, что ни один из вас не написал код, который вы сдаете!

3 Ответов

Рейтинг:
2

Member 13414014

#include<stdio.h>
int main()
{
	char str[10];
	int i,j,k,len=0;
        printf("Enter the string:\n");
	scanf("%s",str);
	for(i=0,k=0;str[i]!='\0';i++,k++)
	{
		if(str[i]!=str[i+1])
		{
			if(k>len)
			 len=k;
			k=0;
		}
	}
	printf("%d",len);
	return 0;
}


Richard MacCutchan

Вы не помогаете людям, выполняя за них их работу.

Member 13414014

Я не делал чужой работы. Я сделал свою работу и представил свое решение.

CPallini

Хотя я согласен с замечанием Ричарда, я признаю, что это хороший кусок кода. Мой 5.

Dave Kreskowiak

И если ОП передаст это дело, они потерпят неудачу. ПОЧЕМУ?

Код - это своего рода отпечаток пальца, уникальный для навыков человека, который его написал. Сравните этот код с тем, что ОП включил раньше, и станет очевидно, что два разных человека написали два кодовых задания. Тогда это просто вопрос поиска кода в Google и выяснения того, что ОП получил его из интернета. Мгновенный провал.

Рейтинг:
1

OriginalGriff

Почему ты так все усложняешь?
Я знаю, что это домашняя работа, но ..... это не сложная задача: все, что вам нужно сделать, это найти самую длинную длину пробега и распечатать ее.

Так:
1) Создайте переменную для хранения текущей длины пробега. Инициализировать его в 0
2) Создайте переменную для хранения самой длинной длины пробега. Инициализируйте его до -1
3) проверьте длину строки: если она равна единице или нулю, то это длина пробега.
4) выполните цикл через строку, начиная со второго символа. Она такая же, как и предыдущая?
4.1) да. Увеличьте текущую длину пробега на единицу. Это больше, чем самая длинная длина пробега?
4.1.1) да. Установите самый длинный на текущий.
4.1.2) нет, ничего не делать.
4.2) нет. установите текущую длину пробега на единицу.
5) Повторите от 4 до конца строки.
6) выведите самую длинную длину пробега.

Легко: это, вероятно, меньше кода C, чем описание!


Member 13413955

можете ли вы пожалуйста представить код

OriginalGriff

Нет! Это твое домашнее задание, а не мое.
Мы не делаем домашнее задание: оно задано не просто так. Она существует для того, чтобы вы думали о том, что вам сказали, и пытались понять это. Он также существует для того, чтобы ваш наставник мог определить области, в которых вы слабы, и сосредоточить больше внимания на корректирующих действиях.
И это действительно нетрудно.
Плюс... вы понимаете, что ваш наставник знает об этом сайте и сразу поймет, если вы скопируете и вставите свое решение от кого-то другого?

Попробуйте сами, возможно, вы обнаружите, что это не так сложно, как вы думаете!

Если вы столкнетесь с конкретной проблемой, то, пожалуйста, спросите об этом, и мы сделаем все возможное, чтобы помочь. Но мы не собираемся делать все это для вас!

CPallini

5.

Рейтинг:
0

Patrice T

Проблема в вашем коде заключается в том, что он не связан с этим домашним заданием.

Мы не делаем вашу домашнюю работу.
Домашнее задание предназначено не для того, чтобы проверить ваши навыки просить других людей выполнять вашу работу, а для того, чтобы заставить вас думать и помочь вашему учителю проверить ваше понимание пройденных вами курсов, а также проблем, возникающих при их применении.
Любая ваша неудача поможет учителю выявить ваши слабости и наметить меры по их исправлению.
Любая ваша неудача поможет вам узнать, что работает, а что нет, это называется "методом проб и ошибок".
Так что попробуйте, перечитайте свои уроки и начинайте работать. Если вы застряли на конкретной проблеме, покажите свой код и объясните эту точную проблему, мы можем помочь.

Как программист, ваша задача-создавать алгоритмы это решает конкретные проблемы, и вы не можете полагаться на кого-то другого, чтобы вечно делать это за вас, поэтому есть время, когда вам придется научиться этому. И чем скорее, тем лучше.