#problem z zadaniem na pętle while

0

Mam zadanie domowe na pętle while, bez użycia tablic, nie mam pojęcia jak się za nie zabrać (jestem początkująca) nakieruje mnie ktoś? Oto treść zadania:
Napisać program, który wczytuje napisy aż do powtórnego wczytania napisu takiego, jak pierwszy lub drugi wczytany napis. Wydrukować następujące informacje (biorąc pod uwagę wszystkie wczytane napisy):
• ile znaków miał najkrótszy wczytany napis
• ile znaków miał najdłuższy wczytany napis
• ile było takich sytuacji, że pierwszy znak aktualnego napisu był taki sam, jak ostatni znak poprzedniego napisu.
UWAGA: Program napisać bez użycia tablic. Nie należy nigdzie zapisywać całego wczytanego ciągu.
Wskazówki

  1. Napisy należy wczytywać - jako zmienne typu string - instrukcją cin (do pierwszego niewidocznego znaku, np. spacji lub Entera)
  2. Jeśli napis jest zmienną typu string, to jego długość (liczba znaków) jest równa n= napis.size( ), pierwszy znak to napis[0], zaś ostatni znak to napis[n-1].
0

Nie licze, ze ktos to zrobi za mnie tylko mi powiedziec od czego zaczac, jak to rozlozyc.

0

Mniej więcej tego powinni od Ciebie oczekiwać:

  1. Stwórz: dwa containery (std::string) dla pierwszego i drugiego wczytanego napisu oraz zmienną char.

  2. Wczytaj pierwszy napis do pierwszego containera.

  3. Wczytaj drugi napis do drugiego containera.

  4. Przypisz ostatni znak wczytanego napisu z pkt3 do zmiennej char.

  5. Stwórz trzeci container std::string dla wczytywanego w pętli napisu oraz "licznik sytuacji" z początkową wartością 0.

Wykonuj w zapętleniu tak długo jak zawartość trzeciego containera rożni się od pierwszego lub drugiego containera:
6. Wczytaj napis do trzeciego containera.
7. Zwiększ licznik o 1 jeśli pierwszy znak trzeciego containera jest różny od zmiennej char.
8. Przypisz ostatni znak wczytanego napisu z pkt6 do zmiennej char.
9. Wróć na początek pętli.

  1. Po wyjściu z pętli wypisz licznik.

Jak to zrobisz to rozbuduj o znajdowanie najdłuższego i najkrótszego napisu. Zwróć uwagę na punkt 4: powinno się to robić od samego początku, ale nie chciałem komplikować.

0

Jeju, dziekuje, teraz przynajmniej wiem od czego zacząć :)

0

Ja mogę polecić te dwie strony, gdybyś chciała pisać coś więcej w C++:

0

Dziekuje na pewno skorzystam :)

0

Już minęło trochę czasu więc podsyłam moje rozwiązanie. 😉

#include <iostream>
using namespace std;

void wczytaj_slowo(string& word1)
{

	cout << "Podaj slowo: ";
	cin >> word1;
	cout << word1 << endl;
}

int main() {
	string word1, word2, nxtWord;
	wczytaj_slowo(word1);
	wczytaj_slowo(word2);
	
	long unsigned shortestWord =  min(word1.length(), word2.length());
	long unsigned longestWord =  max(word1.length(), word2.length());

	int thatCase = word1[word1.length()-1] == word2[0] ? 1 : 0;
	char lstchar = word2[word2.length()-1];
	
	while (wczytaj_slowo(nxtWord),
	      !cin.eof() &&
		  !word1.compare(nxtWord) == 0 && 
		  !word2.compare(nxtWord) == 0)
	{
		longestWord = max(longestWord, nxtWord.length());
		shortestWord = min(shortestWord, nxtWord.length());
		if (nxtWord[0] == lstchar) thatCase++;
		lstchar = nxtWord[nxtWord.length()-1];
	}
	
	cout << "Najkrotsze wczytane slowo: " << shortestWord << endl;
	cout << "Najdluzsze wczytane slowo: " << longestWord << endl;
	cout << "Sytuacji, że pierwszy znak aktualnego napisu był taki sam, jak ostatni znak poprzedniego napisu: " << thatCase <<endl;
	return 0;
}

Ideone: https://ideone.com/2BkwzU

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