Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > работа из строками


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

Автор: mes 8.12.2008, 21:38
считать длину каждой последовательности, запоминая самую длиную.

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

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

Автор: vmagdn 9.12.2008, 19:52
а как правильно реализовать?

Автор: Dmi3ev 9.12.2008, 20:17
Код

//---------------------------------------------------------------------------
#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 секунд
Цитата

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

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

Автор: mes 9.12.2008, 20:23
вот набросок , а дальше смотрите как Вам надо 
Код


#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, даже оказывается у тебя теперь два начальных варианта есть ..  ;-) 

Автор: Dmi3ev 9.12.2008, 20:28
Цитата

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

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

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

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

Автор: taiven 9.12.2008, 21:29
Код

#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;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)