Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа из строками 
:(
    Опции темы
vmagdn
Дата 8.12.2008, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



Как определить самую длинную последовательность цыфр в тексте.
PM   Вверх
mes
Дата 8.12.2008, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



считать длину каждой последовательности, запоминая самую длиную.


--------------------
PM MAIL WWW   Вверх
Dmi3ev
Дата 8.12.2008, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



ввести две переменные:
1. если в строке встречается цифра одна начинает расти, она растет либо пока строка не кончится, либо пока не начнутся буквы.
2. сравниваешь эту переменную со второй, ОНА И БУДЕТ ХРАНИТЬ МАКСИМАЛЬНУЮ ПОСЛЕДОВАТЕЛЬНОСТЬ ЦИФР. ОБНУЛЯЕШЬ ПЕРВУЮ И ПОГНАЛ ДАЛЬШЕ ПО СТРОКЕ.
ЕСЛИ НУЖНО, МОЖНО ЕЩЕ И ПОСЛЕДОВАТЕЛЬНОСТЬ ВЫВЕСТИ

Добавлено через 39 секунд
mes, БЫСТРЕЕ)))


--------------------

PM MAIL   Вверх
vmagdn
Дата 9.12.2008, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



а как правильно реализовать?
PM   Вверх
Dmi3ev
Дата 9.12.2008, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Код

//---------------------------------------------------------------------------
#include <iostream.h>
//---------------------------------------------------------------------------
int check (int m, int k)
{
 if (k>m)
  return k;
 else
  return m;
}
//---------------------------------------------------------------------------
int maxlendig(char * s, int l)
{
int max=0;
int k=0;
for (int i=0; i<l; i++)
 {
  if (isdigit(*s))
   k++;
  else
   {
    max=check(max,k);
    k=0;
   }
   s++;
 }
max=check(max,k);
return max;
}
//---------------------------------------------------------------------------
int main()
{
char str[255];
cout<<"Enter the string: "<<endl;
cin.getline(str, 255);
int max=maxlendig(str, strlen(str));
cout<<"------------> "<<max<<" <----------------";
return 0;
}
//---------------------------------------------------------------------------

можно вот так примерно, хоть и не самый короткий способ))) Но здесь даже функция определения максимума своя))) наворот, так сказать)))

Добавлено через 3 минуты и 58 секунд
Цитата

а как правильно реализовать?

очень интересно??? Делать надо, а правильно, неправильно, время покажет...


--------------------

PM MAIL   Вверх
mes
Дата 9.12.2008, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



вот набросок , а дальше смотрите как Вам надо 
Код


#include <iostream>

void show (const char * begin, const char * end)
{
    for (;begin<end; ++begin) std::cout << *begin; // посимвольное отображение
}

void find(const char *p)
{

  const char  * begin=p; // начало первой самой длиной последовательности
  const char  * end=p;   // конец первой самой длиной последовательности
  const char  * p1;     // начало текущей последовательности

  bool flag = false; // флаг непрерывности последовательности

  while (*p) // пока нет конца строки
  {
       if (*p>='0' && *p<='9') // если символ явл. цифрой
           if (!flag)  flag = true, p1 =p;   // и мы были вне последователжности, то запоминаем начало последовательности и устанавливаем флаг.
           else ;
       else // иначе, если символ не цифра
          if (flag) // если были в последовательности
                    { flag = false; // последовательность закончена
                      if (p-p1 > end-begin) begin =p1, end = p;// если новая длинее старой, запоминаем новую.
                        std::cout<< "curr seq : ";
                        show (p1,p); // показываем для теста текущую последовательность
                        std::cout<< std::endl;
                     }
  ++p; // к следующему символу
  }

  std::cout<< std::endl;

  std::cout<< "max seq : ";
  show (begin,end); // делаем что то с найденной последовательностью
  std::cout<< std::endl;
}

int main()
{

  find ("235324534jol346 345 26345634564z34567 115675673573567562 547 2737 27u n3u4568u74765468 uj 4687");

  system("pause");
  return 0;
}


Добавлено через 4 минуты и 17 секунд
vmagdn, даже оказывается у тебя теперь два начальных варианта есть ..  ;-) 

Это сообщение отредактировал(а) mes - 9.12.2008, 20:26


--------------------
PM MAIL WWW   Вверх
Dmi3ev
Дата 9.12.2008, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Цитата

без проверки на конец строки? ;) 

Здесь я думаю, это неважно, тк я передаю размер строки, а потом просто прохожу по строке, если строку не менять, то это очень даже покатит)))
Я достал этот код из сундука практически, со времен учебы было нечто подобное, а учили нас ох как плохо)))


--------------------

PM MAIL   Вверх
mes
Дата 9.12.2008, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(vmagdn @  8.12.2008,  21:15 Найти цитируемый пост)
Как определить самую длинную последовательность цыфр в тексте.

что подразумевалось?  длинa нужна или  сама последовательность ... для длины подходит первый вариант, иначе второй.

Это сообщение отредактировал(а) mes - 9.12.2008, 20:30


--------------------
PM MAIL WWW   Вверх
taiven
Дата 9.12.2008, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 2
Всего: 9



Код

#include<iostream>

int main() 
{
    const char *str = "123 234 2334sd;j34 0934 fd893dfh 23423432334232 34323";
    int cur_count = 0, res_count = 0;

    while(*str)
    {
        if(isdigit(*str))
        {
            while(isdigit(*str) && *str++) ++cur_count;
            if(cur_count > res_count) res_count = cur_count;
            cur_count = 0;
        }
        *str++;
    }

    std::cout << "result: " << res_count << '\n';

    return 0;
}

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.