Portál AbcLinuxu, 15. července 2025 23:19


Dotaz: C++ nalezeni vsech podretezcu

26.2.2012 10:35 Karel Machyna
C++ nalezeni vsech podretezcu
Přečteno: 263×
Odpovědět | Admin
Dobry den, jak mohu pomoc C++ nejjednoduseji nalezt VSECHNY vyskyty urciteho podretezce v reteci.

Napriklad pro retezec "abchsjeabcdjekabcakabc" hledame vyskyty podretezce "abc" a potreboval bych, aby dana funkce vratila vsechny indexy vyskytu tohoto podretezce, tedy pole [0,7,14,19].
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

26.2.2012 11:34 juriad | skóre: 7
Rozbalit Rozbalit vše Re: C++ nalezeni vsech podretezcu
Odpovědět | | Sbalit | Link | Blokovat | Admin
http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm

Implementací najdeš dost
26.2.2012 14:26 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: C++ nalezeni vsech podretezcu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nejjednodušeji asi pomocí find.
#include <string>
#include <iostream>

int main()
{
  std::string str_in,str_search,bool_str;
  size_t move = 1;
  /* insert input */
  std::cout << "    Type input text: ";
  std::cin >> str_in;
  std::cout << "   Type search text: ";
  std::cin >> str_search;
  std::cout << "Accept overlaps y/n: ";
  std::cin >> bool_str;
  if(bool_str[0] == 'n')
    move = str_search.length();

  std::cout << "Found: ";
  size_t fi = 0;
  while((fi=str_in.find(str_search,fi)) != std::string::npos){
    std::cout << fi << " ";
    fi+=move;
  }
  std::cout << std::endl;
  return 0;
}
…třetí dotaz řeší, jestli opravdu všechny.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.