Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Длина максимальной серии символов

Автор: Olya 6.09.2007 2:32

unsure.gif Помогите пожалуйста написать программку. Буду очень благодарна yes2.gif

Вот что-то вроде алгоритма:
программка идет по заданному тексту (одномерному массиву), если встречается буква, то идем далее, если цифра или другой символ, счётчик +1 данного участка, запоминаем счётчики на отд. участках, заем они сравниваются, программка выдает максимальный.

Код
Я хотела &!123 бы быть 8936!, крев едкой! :blum:
Ответ:6

Автор: volvo 6.09.2007 2:53

Разберешься?

#include <ctype.h>
#include <stdio.h>

int main()
{
char s[] = "Я хотела &!123 бы быть 8936!, крев едкой!\0";
int count, max = 0;

for(char *p = s, count = 0; *p; p++)
(isalpha(*p) || *p == 32) ? ((count > max) ? max = count, count = 0:max = max): ++count;
printf("%d", max);

return 0;
}

(проверялось в GCC)

Автор: Olya 6.09.2007 9:00

no1.gif Можно поподробнее, мы только начали на Visual C++.net 2003 программировать, нам нельзя использовать классы, и обычно программку мы начинаем следующим образом:

#include <iostream>
#include <conio.h>
using spacename std;

int main()
{
...
getch();
return 0;
}


blink.gif Да и как это будет выглядеть, если пользователь сам будет вводить эту строку символов (текст)??

Автор: volvo 6.09.2007 17:28

Цитата
нам нельзя использовать классы
А где ты здесь классы увидела? Это вообще практически чистый С, а не С++. А вот смешивать одно с другим, как этого хочешь ты (в частности, вроде бы и С++, но и классы не использовать, хотя std почему-то можно) я бы не советовал... Как строку представлять, например, будешь? Вообще-то подразумевается std::string, но ведь это - класс, тебе нельзя этим пользоваться...

Если непонятно использование оператора ?: - то вот то же самое, но с if-ами:

#include <ctype.h>
#include <stdio.h>

int main()
{
char s[256]; // Буфер под строку
int count, max = 0;

gets(s); // читаем строку с клавиатуры... Если хочешь, можешь заменить на cin.getline(s, 256);

// для каждого символа строки проделываем следующее
for(char *p = s, count = 0; *p; p++)
// если символ - буква или пробел (32 - это код пробела) ...
if(isalpha(*p) || *p == 32) {
// ... то если полученное на данный момент число символов в серии больше максимального
if(count > max) {
max = count; // тогда запоминаем его как максимальное
count = 0; // а собственно счетчик - обнуляем
}
}
else count += 1; // если же это не буква и не пробел, то увеличиваем счетчик символов

printf("%d", max);
// печатаем результат. При желании можно заменить
// на cout << "max = " << max << endl;
return 0;
}


Автор: Olya 8.09.2007 20:18

yes2.gif Я уточнила, как программка должна работать, пользователь должен сам ввести строку символов, включающую буквы, цифры, символы и пробелы. Но пробелы не считаются. Можно ли это сделать в программке и как?

Вместо команды:

printf("%d", max);


можно ли использовать
cout<<
cin>>
,

предварительно подключив
using spacename  std;
и
#include <iostream>


wub.gif Можно ли поподробнее объяснить процесс самого поиска этой максимальной серии символов?

Автор: volvo 9.09.2007 0:07

Цитата
Можно ли поподробнее объяснить процесс самого поиска

Комментарии добавлены...

Автор: Olya 9.09.2007 0:18

smile.gif smile.gif smile.gif smile.gif Спасибо, солнышко! smile.gif smile.gif smile.gif smile.gif

Автор: Olya 16.09.2007 23:47

Можно ли заменить эту программку следующим образом? rolleyes.gif

#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
char str[256]; // Буфер под строку
int count, max = 0;

cin.getline(str, 256); // читаем строку с клавиатуры

// для каждого символа строки проделываем следующее
for(int i=0, count = 0; str[i]!="/0"; i++)
// если символ - буква или пробел (32 - это код пробела) ...

if((str[i]>64)&&(str[i]<91)&&(str[i]<=255)&&(str[i]>191)||(str[i]==32)){

// ... то если полученное на данный момент число символов в серии больше максимального
if(count > max) {
max = count; // тогда запоминаем его как максимальное
count = 0; // а собственно счетчик - обнуляем
}
}
else count += 1; // если же это не буква и не пробел, то увеличиваем счетчик символов

cout << "max = " << max << endl;// печатаем результат
getch();
return 0;
}

blum.gif

Автор: volvo 17.09.2007 0:07

Ну, и чем это отличается от того, что я написал в комментариях? Тем что в очередной раз изобретается велосипед вместо использования функции isalpha? Но тогда, прости, по какому праву ты используешь cout? Не пойдет, переписывай потоковый вывод с нуля тоже... Что за двойной стандарт? Либо ты пользуешься готовым везде, либо - нигде...

Автор: Olya 17.09.2007 9:41

Цитата(volvo @ 17.09.2007 0:07) *

Ну, и чем это отличается от того, что я написал в комментариях? Тем что в очередной раз изобретается велосипед вместо использования функции isalpha? Но тогда, прости, по какому праву ты используешь cout? Не пойдет, переписывай потоковый вывод с нуля тоже... Что за двойной стандарт? Либо ты пользуешься готовым везде, либо - нигде...

Почему мы не можем использовать
 cout?
мы же подключили библиотеку
<iostream>
... blink.gif

Автор: hardcase 17.09.2007 22:02

Цитата(Olya @ 17.09.2007 6:41) *

Почему мы не можем использовать
 cout?
мы же подключили библиотеку
<iostream>
... blink.gif
Заменить можешь, просто isalpha несколько понятнее вереницы символов в условии, volvo ругается именно из за этого момента, потомучто в остальном программа идентична его варианту.

Автор: Olya 18.09.2007 0:47

Цитата(hardcase @ 17.09.2007 22:02) *

Заменить можешь, просто isalpha несколько понятнее вереницы символов в условии, volvo ругается именно из за этого момента, потомучто в остальном программа идентична его варианту.

Спасибо!!! smile.gif