Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++]Dzielenie stringa na słowa.

Ostatnio zmodyfikowano 2014-10-22 19:42
Autor Wiadomość
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.

C/C++
#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;
    //cout<<"2 i 3 znak: "<<rezultat.substr(1,2);
    cin.ignore();
    return 0;
}

P-119213
michal11
» 2014-10-22 19:42:19
Wystarczy skorzystać z istringstream.

C/C++
#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:
C/C++
std::cout << slowo[ 1 ] << slowo[ 2 ] << std::endl;
P-119217
« 1 »
  Strona 1 z 1