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

Odwracanie słów w zdaniu po kolei

Ostatnio zmodyfikowano 2020-08-03 12:15
Autor Wiadomość
P8ON
Temat założony przez niniejszego użytkownika
Odwracanie słów w zdaniu po kolei
» 2020-07-31 23:35:48
Witam, mam problem z kodem. Chciałem stworzyć program który pisze w spak słowo po słowie z zdania. np. "Mam na imię jadzia" zamienił by na "mam an ęimi aizdaj". Jednak nie potrafię ominąć wymogu podania ilości słów z których składa się zdanie. Dlatego też zwracam się do was o pomoc (ogólne rady nie do końca związane z kodem też z chęcią przyjmę).
/code
#include <iostream>
#include <string>
#include<algorithm>
using namespace std;

int main()
{



    int z=1;
    string zdanie;
    cout<<"Write your sentence: ";
    for(int i=0; i<z; i++)
    {

        string str, s1;
        cin>>str;

        for(int j=str.length(); j>=0; j--)
        {
            s1+=str[j];

        }


        transform(s1.begin(),s1.end(),s1.begin(), ::tolower);
        zdanie +=s1;


    }
    zdanie[1] = toupper(zdanie[1]);
    cout<<zdanie;
    return 0;
}
 
P-177400
pekfos
» 2020-08-01 00:00:41
Najlepiej wczytaj cały tekst od razu i przetwarzaj jeden napis zawierający cały tekst. Nie wiem jak daleko chcesz pociągnąć ten program, ale pewnie w końcu pojawi się potrzeba by dzielić tekst na słowa inaczej, niż robi to >>. Choćby po to, by interpunkcja nie była traktowana jako fragment słowa - "test!" raczej chcesz zmienić w "tset!", a nie "!tset". Do wczytania linii tekstu można użyć std::getline().
P-177401
P8ON
Temat założony przez niniejszego użytkownika
» 2020-08-01 21:45:38
Rozumiem, jednak nie wiem jakiej komendy należało by użyć aby podzielić całe zdanie na poszczególne słowa i je odwracać. Zależy mi na efekcie "ala ma kota" -> "ala am atok". Z getlinem udało mi się dojść do efektu typu "Michał Gwiazda" -> "adzaiwg łahcim", więc poproszę o poradę.
P-177402
pekfos
» 2020-08-02 13:20:49
Nie ma tu żadnej komendy, której "należy użyć". Wystarczą zmienne, warunki i pętle. Znajdź pierwszy znak który byś zaklasyfikował jako początek słowa (indeks A), potem pierwszy znak który już nie należy do tego słowa (indeks B>A). Odwróć kolejność znaków w zakresie [A; B). Itd do końca napisu. Opcjonalnie możesz sobie pomóc funkcjami std::isalpha() i std::reverse().
P-177403
P8ON
Temat założony przez niniejszego użytkownika
Podziękowania
» 2020-08-03 12:15:10
Udało mi się, bardzo dziękuję za pomoc!
A dla zainteresowanych kod:
C/C++
#include <iostream>
#include <string>
#include<algorithm>
#include <locale>

using namespace std;
string obrut( string x )
{
    int z = x.length();
    string f_zdanie;
    for( int i = z; i >= 0; i-- )
    {
        f_zdanie += x[ i ];
    }
    return f_zdanie;
}
int main()
{
    for(;; )
    {
       
       
        cout << "Podaj zdanie które chciał byś obrócić (bez polskich znaków): ";
       
        string zdanie, t_zdanie, zdanie_koncowe;
        getline( cin, zdanie );
        for( int i = 0; i <= zdanie.length(); i++ )
        {
            if( isalpha( zdanie[ i ] ) || isdigit( zdanie[ i ] ) )
            {
                t_zdanie += zdanie[ i ];
            }
            else
            {
                zdanie_koncowe += obrut( t_zdanie );
                zdanie_koncowe += zdanie[ i ];
                t_zdanie.erase();
            }
           
        }
        transform( zdanie_koncowe.begin(), zdanie_koncowe.end(), zdanie_koncowe.begin(),::tolower );
        zdanie_koncowe[ 1 ] = toupper( zdanie_koncowe[ 1 ] );
        cout << zdanie_koncowe << endl;
       
    }
   
    return 0;
}
P-177409
« 1 »
  Strona 1 z 1