Powtarzające się n znaków w pliku

0

Hej!
Mam jakąś liczbę n, powiedzmy n = 8. Mam też plik z bardzo długim tekstem. Chciałbym wyszukać taki wyraz(y), które by spełniał warunek n, tzn: wyjaśnię poniżej:

Mam taki tekst:

My Bonnie lies over the ocean
My Bonnie lies over the sea
My Bonnie lies over the ocean
Oh bring back my Bonnie to me

n = 8;
A więc sprawdzam (sekwencję?) te 8 znaków i wypisuję na wyjście: My Bonnie

Jak na razie napisałem... prawie nic, kod poniżej. Proszę o jakąś sugestię jak się do tego w ogóle zabrać.

#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include <map>
using namespace std;

int main()
{
	ifstream input("tekst.txt");
	string plik;
	int n = 5;
	pair<int, string> para;
	getline(input, plik);
	cout << plik.length();
	for (int i = 0; i < plik.length(); i++)
	{
		if (plik[i].length() = 6)
			para  
	}
	system("pause");
	return 0;
}

1
  1. Dlaczego tylko My Bonnie, a nie również y Bonnie ? (ze spacją na końcu)

  2. Jaki będzie rezultat dla wejścia foo bar foo bar i n=3?

1

Czy liczą się sekwencje tylko zawierające się w 1 linii?
Czy liczy się wielkość liter?
Czy liczą się spacje?

Zakładając, że interesują nas sekwencje w 1 linii oraz wielkość liter ma znaczenie, a spacje też się liczą, to poprawny wynik jest inny niż podał autor, bo:

y Bonnie: 4
Bonnie l: 3
My Bonni: 3
e lies o: 3
es over : 3
ie lies : 3
ies over: 3
lies ove: 3
nie lies: 3
nnie lie: 3
onnie li: 3
over the: 3
s over t: 3
ver the : 3
an: 2
cean: 2
e ocean: 2
ean: 2
er the o: 2
he ocean: 2
n: 2
ocean: 2
r the oc: 2
the ocea: 2
Bonnie t: 1
Oh bring: 1
a: 1
ack my B: 1
back my : 1
bring ba: 1
ck my Bo: 1
e: 1
e sea: 1
e to me: 1
ea: 1
er the s: 1
g back m: 1
h bring : 1
he sea: 1
ie to me: 1
ing back: 1
k my Bon: 1
me: 1
my Bonni: 1
ng back : 1
nie to m: 1
nnie to : 1
o me: 1
onnie to: 1
r the se: 1
ring bac: 1
sea: 1
the sea: 1
to me: 1

Podpowiedź:

  • Jeden sposób to użycie unordered_map<string, uint32_t> i metody string::substr.
  • Drugi sposób to połączenie tych stringów w jeden wielki string i podwójne pętle iterujące po indeksie tego stringa i wypełniające dwuwymiarową tablicę długością najdłuższej wspólnej sekwencji. Trzeba by dodać dodatkowe ograniczenia - na maksymalną długość oraz obsługę złączonych stringów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1