Odwracanie słów w zdaniu po kolei
Ostatnio zmodyfikowano 2020-08-03 12:15
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; } |
|
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(). |
|
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ę. |
|
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(). |
|
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: #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; } |
|
« 1 » |