Do wypisywania danych na ekran potrzebny jest strumień cout. W przypadku zapisu do pliku potrzebujemy strumienia typu ofstream, który pozwoli nam na wprowadzanie danych przy pomocy <<.
Plik składa się z linijek, które mają tekst składający się z dwóch części przedzielonych myślnikiem. Program ma za zadanie wczytać przykładowy plik o takiej zawartości:
Jako wynik powinien zostać stworzony nowy plik tekstowy do którego zostaną zapisane zmienione linijki: wszystkie małe litery przed myślnikiem powinny zostać zamienione na duże. Pozostałe znaki powinny zostać niezmienione.
Możemy założyć, że dane w pliku są poprawne i, że długość pojedynczej linijki w pliku tekstowym jest niedłuższa niż 4096 znaków.
Nie znamy z góry długości pliku, dlatego w celu optymalizacji odczytywania danych będziemy wczytywać plik linijka po linijce. Jednak znamy tylko maksymalną długość linijki, więc stworzymy tablicę znaków służącą za bufor. W celu ułatwienia ewentualnej zmiany wielkości bufora zadeklarujemy zmienną stałą typu int na początku kodu:
Przed rozpoczęciem pisania głównej funkcji napiszemy funkcję pomocniczą changeTXT(). Jako argument przyjmuje tablice znaków char. Funkcja może modyfikować podany argument, więc nic nie zwraca.
(2.) Ustalamy indeks od którego przeglądamy napis. (3.) Rozpoczynamy pętle, która będzie sprawdzać każdy kolejny znak napisu dopóki nie natrafi na myślnik lub koniec napisu. (4.) Jeśli jesteśmy w pętli to znaczy, że wciąż przeglądamy pierwszą część tekstu czyli kiedy trafimy na małą literę to (5.) zamieniamy ją na dużą. (6.) Przechodzimy do następnego znaku.
Do zapisania pliku potrzebujemy strumienia typu ofstream, który możemy zadeklarować po dołączeniu biblioteki fstream.
(2.) Deklarujemy nową zmienną typu ifstream służącą do odczytywania pliku. (3.) Otwieramy plik zawierający tekst do skonwertowania. (4.) Upewniamy się, że plik jest gotowy do odczytu.
(5.) Deklarujemy nową zmienną typu ofstream. Jest to strumień, który pozwoli nam zapisywać dane do pliku. (6.) Wskazujemy komputerowi do jakiego pliku chcemy zapisać dane. W przypadku, gdy taki plik nie istnieje to zostanie utworzony, a jeśli istnieje to zostanie nadpisany.
(7.) Sprawdzamy czy strumień jest gotowy do zapisu. Jeśli tak to (8.) deklarujemy zmienną line, która będzie naszym buforem podczas odczytywania pliku.
(9.) Dopóki odczytujemy dane wykonujemy pętle while. (10.) Do zmiennej line wczytujemy kolejną linijkę z pliku. (11.) Konwertujemy dane w linijce. (12.) Wprowadzamy do wyjściowego pliku nowe dane.
Kiedy zakończymy pętle while() (14.) dealokujemy pamięć zajętą przez bufor i (15.) pokazujemy komunikat o powodzeniu konwersji.
Jeśli jednak nasz plik wyjściowe nie został prawidłowo otwarty to wyświetlamy komunikat. Bardzo ważne jest, aby (20.) zamknąć strumień, aby inne programy mogły mieć dostęp do lokalizacji pliku.
W przypadku (22.) Braku odczytania pliku wejściowego warto wypisać odpowiedni komunikat. (24.) Zamykamy strumień odczytu pliku i (25.) czekamy na interakcję użytkownika i (25.) kończymy wykonywanie programu.
Zmień kod tak, aby wszystkie małe litery przed myślnikiem były zamienione na duże, a po myślniku każdy wyraz zaczynał się z dużej litery, a pozostałem miał małe. Dla ułatwienia możesz przyjąć, że pomiędzy dwoma wyrazami jest spacja.