Bonobo Temat założony przez niniejszego użytkownika |
[C++] Rozdział 27 - Błąd przy wyszukiwaniu frazy w tekście » 2015-07-31 03:15:15 Witam W trakcie wykonywania pracy domowej z rozdziału 27 (Wyszukiwanie frazy w tekście, http://cpp0x.pl/kursy/Kurs-C++/Poziom-3/Wyszukiwanie-frazy-w-tekscie/352), chciałem dodać coś od siebie. Stworzyłem nową zmienną która przechowywała tekst a następnie użytkownik sam podawał dwie frazy które program starał się odnaleźć we wcześniej podanym napisie. I wszystko byłoby fajnie, gdyby nie to że program działa z przykładami podanymi na stronie, działa również gdy podam po jednej literze lecz nie działa gdy przynajmniej jedna zmienna będzie posiadała więcej niż jeden znak. Funkcja którą napisałem w ramach pracy domowej: bool szukaj( std::string & tekst, std::string wyraz1, std::string wyraz2 ) { size_t jeden_wyraz = tekst.find( wyraz1 ); size_t drugi_wyraz = tekst.find( wyraz2 ); if(( jeden_wyraz != string::npos ) &&( drugi_wyraz != string::npos ) ) return true; else return false; } Oraz funkcja main: int main() { string napis = "Zadanie domowe z kursu C++ (http://cpp0x.pl) - najlepszy kurs C++ w Internecie!"; string napis2; string wyraz, wyraz2; cout << "Podaj napis \n"; getline( cin, napis2 ); cin.clear(); cin.sync(); cout << "Podaj 2 wyrazy \n"; cin >> wyraz; cout << cin.good() << endl; cin.clear(); cin.sync(); cin >> wyraz2; cout << cin.good() << endl; wypiszWynik( szukaj( napis, wyraz, wyraz2 ) ); wypiszWynik( szukaj( napis, "ada", "kurs" ) ); wypiszWynik( szukaj( napis, "ada", "taki" ) ); wypiszWynik( szukaj( napis, "C++", "cpp0x" ) ); wypiszWynik( szukaj( napis, "C#", "cpp0x" ) ); _getch(); return 0; } Nie wiem w czym jest błąd, ponieważ dla gotowych wyrażeń wszystko działa, a dla zmiennych już nie. Będę wdzięczny za pomoc, pozdrawiam :) |
|
carlosmay |
» 2015-07-31 08:42:08 Wyczyść strumień przed getline.
Edit: dla świętego spokoju inicjalizuje zmienne od razu. |
|
pekfos |
» 2015-07-31 13:27:11 dla świętego spokoju inicjalizuje zmienne od razu. |
W jego kodzie jest jakaś niezainicjalizowana zmienna? |
|
Bonobo Temat założony przez niniejszego użytkownika |
» 2015-07-31 13:37:56 cout << "Podaj napis \n"; getline( cin, napis2 ); cin.clear(); cin.sync(); cout << "Podaj 2 wyrazy \n"; cin >> wyraz; cout << cin.good() << endl; cin.clear(); cin.sync(); cin >> wyraz2; cout << cin.good() << endl; Tutaj :) Gdy użytkownik sam podaje napis i frazy które program ma sprawdzić. Wyczyściłem strumień przed getline, nic to nie dało niestety. Nie rozumiem dlaczego dla pojedynczych liter działa, tak jakby to był char a nie string. Flagi pokazują że wyrazy wczytuje pomyślnie. Może nie tej metody find użyłem? |
|
pekfos |
» 2015-07-31 13:47:20 Wczytywanie to jedyne, co robisz ze zmienną napis2. |
|
Bonobo Temat założony przez niniejszego użytkownika |
» 2015-07-31 13:58:50 No tak, w sumie zły kawałek kodu wziąłem. Pryz tworzeniu zmiennych nie nadaje im początkowej wartości :) Ale odbiegliśmy od tematu, a program nadal nie spełnia moich oczekiwań :) Jakieś inne pomysły co do błędów? |
|
carlosmay |
» 2015-07-31 14:18:54 Wczytujesz łańcuch do zmiennej napis2, ale nie przekazujesz jej nigdzie do funkcji. |
|
xKTN |
» 2015-07-31 14:20:18 Pekfos napisał przecież. Chcesz szukać w zmiennej napis2 (podanej przez użytkownika), ale do funkcji przekazujesz z uporem maniaka zmienną napis (z zadania).
Edit: carlosmay masz lepszy refleks :) |
|
« 1 » 2 |