Закрытая тема
Показано с 1 по 3 из 3

Тема: Разбиение строки на слова

  1. #1
    Moderator Куратор
    system architect
    Хыиуду has a spectacular aura about Хыиуду has a spectacular aura about
    Регистрация
    06.03.2005
    Адрес
    Москва
    Сообщений
    2,388
    Вес репутации
    19

    По умолчанию Разбиение строки на слова

    Как ни гневаются завсегдатаи форума при виде очередной темы в "Решите мне задачку", начинающуюся с "Разбить строку на слова...", как ни заявляют они, что это дело обсуждали здесь миллион раз, а все же поиск по форуму не помогает найти алгоритм для такого разбиения. Поэтому пишу здесь, а если AiK все-таки сделает раздел "Решение элементарных задач", эту тему можно перенести туда.

    Код :
    1. function strtok(var s:string;delims:string):string;
    2. {Функция разбивает строку s на слова, разделенные символами-разделителями,
    3. указанными в строке delims. Функция возвращает первое найденное слово, при
    4. этом из строки s удаляется начальная часть до следующего слова}
    5. var res:string; state:byte; i:integer;
    6. begin
    7.   state:=1;
    8.   res:='';
    9.   if s='' then
    10.   begin
    11.     result:='';
    12.     exit;
    13.   end;
    14.   while pos(s[state],delims)<>0 do
    15.   begin
    16.     inc(state);
    17.     if state>length(s) then
    18.     begin
    19.       s:='';
    20.       result:='';
    21.       exit;
    22.     end;
    23.   end;
    24.   while pos(s[state],delims)=0 do
    25.   begin
    26.      res:=res+s[state];
    27.      inc(state);
    28.      if state>length(s) then
    29.      begin
    30.        s:='';
    31.        result:=res;
    32.        exit;
    33.      end;
    34.   end;
    35.   while pos(s[state],delims)<>0 do
    36.   begin
    37.     inc(state);
    38.     if state>length(s) then
    39.     begin
    40.       s:='';
    41.       result:=res;
    42.       exit;
    43.     end;
    44.   end;
    45.   delete(s,1,state-1);
    46.   result:=res;
    47. end;
    Пример применения:
    s:=' 123 a,aa !!! bbb !';
    delims:=' ,!';
    strtok(s,delims); //возвращает '123', s='a,aa !!! bbb !'
    strtok(s,delims); //возвращает 'a', s='aa !!! bbb !'
    strtok(s,delims); //возвращает 'aa', s='bbb !'
    strtok(s,delims); //возвращает 'bbb', s=''
    strtok(s,delims); //возвращает '', s=''

    В языке С есть одноименная функция в strings.h
    Искусство программирования - заставить компьютер делать все то, что вам делать лень.
    Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.

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

     
    Хотите избавиться от рекламы? Зарегистрируйтесь
  3. #2
    Moderator Куратор
    system architect
    Absurd is on a distinguished road
    Регистрация
    26.02.2004
    Адрес
    Pietari, Venäjä
    Возраст
    39
    Сообщений
    1,213
    Вес репутации
    17

    По умолчанию Re: Разбиение строки на слова

    Цитата Сообщение от Хыиуду Посмотреть сообщение
    В языке С есть одноименная функция в strings.h
    strtok() лучше не использовать. Такой вариант предпочтительнее:

    Код :
    1. template<typename _Outit>
    2. void split(const std::string& str, _Outit _Where, const std::string& delim=",")
    3. {
    4.     std::string::size_type lpos = 0;
    5.     std::string::size_type pos = str.find_first_of(delim, lpos);
    6.     do
    7.     {
    8.         *_Where = str.substr(lpos,pos - lpos);
    9.         // front_inserter, back_inserter and inserter will do
    10.         // nothing with operator++
    11.         ++_Where;
    12.         lpos = ( pos == std::string::npos ) ?  std::string::npos : pos + 1;
    13.         pos = str.find_first_of(delim, lpos);
    14.     }
    15.     while(lpos != std::string::npos);
    16. }
    Последний раз редактировалось Absurd; 05.02.2007 в 14:18.
    2B OR NOT(2B) = FF

  4. #3
    Administrator Админ
    senior developer
    DeeJayC is on a distinguished road
    Регистрация
    17.02.2004
    Адрес
    Ленинград (который Город на Неве)
    Возраст
    43
    Сообщений
    492
    Вес репутации
    80

    По умолчанию Re: Разбиение строки на слова

    Я создаю новую тему по "решению типовых задач", а эту закрываю.
    "Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)

    viel spass, DeeJayC

Закрытая тема

Похожие темы

  1. Поменять местами слова
    Собственно, простейшая задача - нужно поменять порядок слов в текстовой строке, длина строки не ограничена. Как это можно сделать через цикл?
    от Dees в разделе Delphi и Pascal
  2. Строки: Вывод строки со звуком
    Интересует как можно выводить строки(допустим в цикле),сопровождаемые звуковым сигналом... Знаю ,что там для этого есть какой-то "\a". Так куда его...
    от qwertyuiop в разделе C и C++
  3. C++, Borland: поиск слова
    Господа! C++, Borland: поиск слова: есть ли простые операторы (без поиска пробела, знак препинания и т.д.)типа, какого-то GetWord... Влад
    от wlad в разделе C и C++
  4. C++, Borland: поиск слова:
    Господа! C++, Borland: поиск слова: есть ли простые операторы (без поиска пробела, знак препинания и т.д.)типа, какого-то GetWord... Влад
    от wlad в разделе Вопрошайка
  5. Объеденение слова в одно
    Как объяденить слова ? т.е. например per1="aaa"; per2="bbb"; perl3="ccc"; то per99 должно равняться "aaabbbccc" вот как я пробую #include...
    от admsasha в разделе C и C++

Ваши права

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