Losowa zamiana liter - plik tekstowy

0

Hej!

Chcę napisać program, który będzie wykonywał 2 operacje na tekście (zapisanym w pliku txt). Celem tego projektu jest "doświadczalne sprawdzenie założenia, że tekst jest czytelny nawet jeżeli litery w słowach są poprzestawiane o ile pierwsza i ostatnia litera pozostanie bez zmian" :

  1. Ma zostawiać pierwszą i ostatnią literę w każdym słowie bez zmian, natomiast wszystkie w środku musi przestawiać w sposób losowy.
  2. Zamienia tylko pierwszą i ostatnią literę każdego słowa ze sobą.
  • dodatkowo zmieniony tekst ma być zapisany w tym samym pliku co oryginalny, nie należy tworzyć dodatkowych plików pomocniczych i nie można wczytywać zawartości całego pliku na raz do pamięci np. do tablicy.

Mam w związku z tym wstępną koncepcję, ale nie do końca wiem czy dobrze myślę, więc doszłam do wniosku że zapytam ludzi, którzy śmigają w cpp.

Myślę, że stworzę 2 pliki tekstowe z tym samym tekstem. Przy pierwszym myślałam, żeby wczytać tekst jako string, następnie podzielić go jakąś funkcją typu "split string" pomiędzy spacjami, coś tam pokombinuję ze znakami przestankowymi i każde z nich wpiszę jako kolejny element w dynamicznej liście typu string. Potem prześlę tą listę do funkcji która będzie zamieniała każdy string na char'a, po czym zostawi pierwszą i ostatnią literę, a zamieni te w środku - nie bardzo wiem jak to zdefiniować w kodzie - pewnie najpierw, gdy jeszcze słowo będzie string'iem, trzeba by policzyć jego długość, wpisać w jakąś zmienną k, może nawet stworzyć listę par typu (string, int) zamiast samego stringa....? I potem użyć indeksów znaków każdego char'a, srand time itp. Następnie chyba wpiszę te zmanipulowane char'y z powrotem do stringów i do listy i dodam do pliku w trybie app.

Jeśli chodzi o drugą operację - analogicznie do poprzedniej, tylko prościej, bo nie będzie tutaj losowości.

Ta koncepcja wydaje mi się trochę pokrętna i zastanawiam się czy nie można tego zrobić krócej....

Pozdrawiam serdecznie i z góry dziękuję za wszelkie pomysły!

0

Znajdujesz pierwszy znak wyrazu. Znajdujesz ostatni znak wyrazu. Zamieniasz miejscami elementy pomiędzy znalezionymi wcześniej elementami..

pisane "na kolanie":

char* iter = text;
char* begin = iter;
while(*iter != '\0')
{
	if(*(iter+1) == ' '|| *(iter+1) == '\0')
	{
		cout << *begin  << " "<< *(iter)<< "\n";
		
		// *begin - wskazuje pierwszy znak wyrazu
		// *iter - wskazuje na ostatni znak wyrazu
		// czarujesz (zamiana elementów)
		
		if(*(iter+1) != '\0') // dla czepialskich, zebysmy nie wychodzili poza tablice
			begin = iter+2;
	}
	iter++;
}
	begin =nullptr;
	iter = nullptr;

EDIT(wrzucam tu część komentarza):
Można w pętli wczytać pierwszy wyraz, "przewinąć" strumień do początku (wyrazu)-> obrobić -> zapisać -> przesunąć strumień do kolejnego elementu (przydatna będzie funkcja rewind() albo fseek()

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