+ Ответить в теме
Показано с 1 по 6 из 6

Тема: Задача на строки/подстроки..

  1. #1
    dummy Наська) is on a distinguished road
    Регистрация
    18.03.2010
    Возраст
    26
    Сообщений
    3
    Вес репутации
    0

    По умолчанию Задача на строки/подстроки..

    Пыталась решить задачу никак(
    Даны две строки и натуральное число К. Наёти К-е вхождение второй строки в первую.

    помогите пожалуйста)

  2. По умолчанию

     
    Хотите избавиться от рекламы? Зарегистрируйтесь
  3. #2
    developer rrrFer is on a distinguished road Аватар для rrrFer
    Регистрация
    07.09.2008
    Возраст
    29
    Сообщений
    224
    Вес репутации
    11

    По умолчанию Re: Задача на строки/подстроки..

    Код cpp:
    1. #include<iostream>
    2. using std::cin;
    3. using std::cout;
    4. using std::endl;
    5. char* f(char *s, char *s0, int k, int pos, int pos0,int lastlen){
    6.     if(!k)
    7.         return &s[pos];
    8.     if(!s0[pos0])
    9.         return f(s,s0,k-1,pos,pos0+1,0);
    10.     if(!s[pos])
    11.         return "";
    12.     if(s0[pos0]==s[pos])
    13.         return f(s,s0,k,pos+1,pos0+1,lastlen+1);
    14.     return f(s,s0,k,pos-lastlen+1,0,0);
    15. }
    16. int main(){
    17.     cout<<f("adsadfgasdhsasdert","asd",2,0,0,0)<<endl;
    18.     cout<<f("adsadfgasdhsasdert","asd",1,0,0,0)<<endl;
    19.     cout<<f("adsadfgasdhsasdert","asd",0,0,0,0)<<endl;
    20.     cout<<endl<<"press any key to continue: "<<endl;
    21.     cin.get();
    22.     return 0;
    23. }
    Приглашаю на свой блог о программировании: pro-prof.com

  4. #3
    dummy Наська) is on a distinguished road
    Регистрация
    18.03.2010
    Возраст
    26
    Сообщений
    3
    Вес репутации
    0

    По умолчанию Re: Задача на строки/подстроки..

    спасибо) сейчас буду разбираться)

  5. #4
    developer rrrFer is on a distinguished road Аватар для rrrFer
    Регистрация
    07.09.2008
    Возраст
    29
    Сообщений
    224
    Вес репутации
    11

    По умолчанию Re: Задача на строки/подстроки..

    Код cpp:
    1. char* f(char *s, char *s0, int k, int pos, int pos0,int lastlen){
    2.     if(k<=0)
    3.         return &s[0];
    4.     if(!s0[pos0])
    5.         return k==1?&s[pos-lastlen]:f(s,s0,k-1,pos,pos0+1,0);
    6.     if(!s[pos])
    7.         return "";
    8.     if(s0[pos0]==s[pos])
    9.         return f(s,s0,k,pos+1,pos0+1,lastlen+1);
    10.     return f(s,s0,k,pos-lastlen+1,0,0);
    11. }
    это если надо вернуть, начиная с k-того вхождения - предыдущий код был после вхождения.
    Первое условие выполняется при некорректном k
    второе если найдено очередное вхождение
    третье если первая строка кончилась
    четвертое если очередной символ строк совпадает
    Если ни одно условие не выполнилось - переходим к следующему символу - для этого считали длину последней не совпавшей последовательности(Lastlen)
    Если выполнилось первое условие - вернем всю строку целиком - можно вернуть сообщение об ошибке
    Если второе то надо уменьшить количество вхождений, которые осталось найти и перейти на следующий символ в обеих строках без отката назад на длину последней последовательности, т.к. последовательности совпали полностью
    Если третье - значит, в первой строке нет достаточного количества вхождений второй строки - возвращаем пустую строку
    Ну и если четвертое - переходим на следующий символ во всех последовательностях
    Последний раз редактировалось rrrFer; 18.03.2010 в 22:14. Причина: code=cpp
    Приглашаю на свой блог о программировании: pro-prof.com

  6. #5
    dummy Наська) is on a distinguished road
    Регистрация
    18.03.2010
    Возраст
    26
    Сообщений
    3
    Вес репутации
    0

    По умолчанию Re: Задача на строки/подстроки..

    ого, блин,а проще кода нет?

    спасиб большое, за эти)
    Последний раз редактировалось Наська); 18.03.2010 в 22:42.

  7. #6
    dummy
    coder
    licenok is on a distinguished road
    Регистрация
    25.08.2010
    Сообщений
    14
    Вес репутации
    0

    Smile Re: Задача на строки/подстроки..

    Код cpp:
    1. // с использованием MFC
    2. CString first;
    3. CString second;
    4.  
    5. int k;
    6. k = 5; //например 5
    7. // предполагается что строки first и second введены заранее
    8. int count = 0;
    9. int itogpos = 0;
    10. int pos;
    11.  
    12. while ((pos = first.Find(second)) != -1)
    13. {
    14.   count++;
    15.   itogpos += pos;
    16.   if (count == k) return itogpos;  
    17.   first = first.Mid(pos);
    18. }
    19. return -1;
    20.  
    21. //всё :)
    Последний раз редактировалось Romeo; 27.08.2010 в 13:30. Причина: Используй [code=cpp][/code]

+ Ответить в теме

Похожие темы

  1. Задача на строки, C++
    Не знаю как подступиться к задаче,а надо сделать очень срочно,помогите!!! Задана запись из букв,количество букв кратно N.Всего в записи M...
    от Freeman12 в разделе задачи на C и C++
  2. Задача на строки
    Помогите плз написать прогу по паскалю Условие такое: в ведённой строке заменить все фрагменты "pavasaris" на "vasara" Надеюсь кому то будет не...
    от Juhn в разделе Решите мне задачку
  3. Задача на строки !
    Дана строка. Найти в ней те слова, которые начинаются и оканчиваются одной и той же буквой.:confused: помогите пожалуйста ...
    от ZimAN в разделе Решите мне задачку
  4. Задача на строки
    Помогите, пожалуйста решить эту задачу, заранее спасибо! Задан текст, преобразовать его, удалив все запятые, предшествующие первой точке и заменив...
    от litis в разделе Решите мне задачку

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения