IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Длина максимальной серии символов, C++
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Женский
Реальное имя: Olya

Репутация: -  0  +


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

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

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


Сообщение отредактировано: Olya -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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

#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)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Женский
Реальное имя: Olya

Репутация: -  0  +


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

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

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


blink.gif Да и как это будет выглядеть, если пользователь сам будет вводить эту строку символов (текст)??
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
нам нельзя использовать классы
А где ты здесь классы увидела? Это вообще практически чистый С, а не С++. А вот смешивать одно с другим, как этого хочешь ты (в частности, вроде бы и С++, но и классы не использовать, хотя 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;
}



Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Женский
Реальное имя: Olya

Репутация: -  0  +


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

Вместо команды:
printf("%d", max);


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

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


wub.gif Можно ли поподробнее объяснить процесс самого поиска этой максимальной серии символов?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






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

Комментарии добавлены...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Женский
Реальное имя: Olya

Репутация: -  0  +


smile.gif smile.gif smile.gif smile.gif Спасибо, солнышко! smile.gif smile.gif smile.gif smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Женский
Реальное имя: Olya

Репутация: -  0  +


Можно ли заменить эту программку следующим образом? 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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






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


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Женский
Реальное имя: Olya

Репутация: -  0  +


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

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

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

Сообщение отредактировано: Olya -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


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

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


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Женский
Реальное имя: Olya

Репутация: -  0  +


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

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

Спасибо!!! smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 22.09.2020 12:26
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name