[C++]Dzielenie stringa na słowa.
Ostatnio zmodyfikowano 2014-10-22 19:42
Amakesh Temat założony przez niniejszego użytkownika |
[C++]Dzielenie stringa na słowa. » 2014-10-22 18:49:35 Witam! Mam takie zadanie: Przeczytaj od użytkownika ciąg tekstu zakończony znakiem kropki (.) Następnie podziel tenże tekst na słowa i wszystkie dłuższe od 4 znaków zapisz do oddzielnej tablicy stringów. Na końcu wypisz na ekran napis złożony z 2 i 3 znaku każdego elementu w tej nowej tablicy. Udało mi się napisać coś takiego, jak poniżej. Niestety nie działa poprawnie, tzn jeśli podam np abcdef. to zadziała ale przy większej ilości słów wyświetla bzdury a przy próbie wyświetlenia 2 i 3 znaku jako rezultat widzę napis "terminate called after throwing an instance of 'std::out_of_range' what<>: basic_string::substr" i program się wysypuje. Nie wiem jak to jeszcze ugryźć. Proszę o pomoc. #include <iostream> #include <string> using namespace std; string wykonaj( string ciag, size_t size ) { string znaki, rezultat, temp; znaki = " .,;:+-=*`></\'][}{()&^%$#@!_?|"; size_t size2 = znaki.size(); for( size_t i = 0; i < size; ++i ) { for( size_t j = 0; j < size2; ++j ) { if( ciag[ i ] == znaki[ j ] ) { temp += ciag.substr( 0, i ); if( temp.length() > 4 ) { rezultat = temp; } } } } return rezultat; }
int main() { setlocale( LC_ALL, "" ); string ciag, rezultat; cout << "Podaj ciąg znaków zakończony kropką (.): " << endl; cin >> ciag; size_t size = ciag.size(); rezultat = wykonaj( ciag, size ); cout << "Rezultat: " << rezultat; cin.ignore(); return 0; }
|
|
michal11 |
» 2014-10-22 19:42:19 Wystarczy skorzystać z istringstream. #include <sstream>
std::istringstream iss( tekst );
while( iss >> slowo ) { std::cout << slowo << std::endl; }
Powinienieś też użyć funkcji getline z odpowiednim parametrem kończącym wczytywanie tekstu, zamiast cin. http://www.cplusplus.com/reference/string/string/getline/?kw=getline. Wypisanie 2 i 3 znaku po sprawdzeniu czy jest ich więcej niż 4 można zrobić po prostu tak: std::cout << slowo[ 1 ] << slowo[ 2 ] << std::endl;
|
|
« 1 » |