[C++] Program wypisujący wprowadzony z klawiatury tekst jak rozstrzelony
Ostatnio zmodyfikowano 2014-09-30 03:16
gienekmiecio Temat założony przez niniejszego użytkownika |
[C++] Program wypisujący wprowadzony z klawiatury tekst jak rozstrzelony » 2014-09-29 20:15:46 Witam mam problem z dokładnością drugiej części pewnego zadania. Zadanie: Napisz program wypisujący wprowadzony z klawiatury tekst jak rozstrzelony w następujący sposób: 1) 2 znaki + 1 spacja 2) 3 znaki + 2 spacje (tekst czytany od końca) PRZYKŁAD ROZWIĄZANIA: Wpisany tekst>> "Ala ma kota." Wypisany tekst w 1: "Al am ak ot a." Program daje spacje co 2 znaki. Wypisany tekst w 2: "A lam ako ta." Program daje spacje od tyłu co 3 znaki. Pierwszy podpunkt rozwiązałem, drugi w połowie. Dlaczego drugi w połowie? Program działa dobrze tylko na tekście wpisanym, którego ilość znaków jest podzielna przez 3 i nie oddaje reszty. Czyli dla tekstu "123456789" działa, ale już dla reszty dwa i jeden, "1234567" "12345678" występują błędy w odstępach. Jak to naprawić? Napisałem program: #include <iostream> #include <cstdlib> #include <ctime> #include <string>
using namespace std;
int main() { cout << "Napisz krotkie zdanie:"; string zdanie, x; int dlugosc = 0; getline( cin, zdanie ); x = zdanie; dlugosc = x.length(); cout << "Zdanie w postaci rozstrzelenia (2+spacja):" << endl; cout << ">>>"; for( int i = 1; i < zdanie.length() + 1; i++ ) { if( zdanie[ i ] == ' ' ) { cout << ""; } else { if( i % 3 == 2 ) { zdanie.insert( i, " " ); } } } cout << zdanie; cout << "<<<" << endl; cout << "Zdanie w postaci rozstrzelenia (3+spacja od tylu):" << endl; cout << ">>>"; int hhh = 0; for( int i = x.length() - 1; i >= 0; i-- ) { hhh = hhh +( dlugosc - 1 ); if( zdanie[ i ] == ' ' ) { cout << ""; } else { if( dlugosc - i == 3 ) { x.insert( i, " " ); } } } for( int i = x.length() - 5; i >= 0; i-- ) { if( zdanie[ i ] == ' ' ) { cout << ""; } else { if( i % 3 == 0 ) { x.insert( i, " " ); } if( i % 3 == 1 ) { x.insert( i - 1, " " ); } if( i % 3 == 2 ) { x.insert( i + 2, " " ); } } } cout << x; cout << "<<<" << endl; return 0; }
|
|
stryku |
» 2014-09-29 23:33:16 Nieważne. Można usuwać posty wgl?
|
|
n3ssi |
» 2014-09-30 03:16:45 Wykombinowałam coś takiego. Owszem działa, ale pewnie dałoby się zrobić to w lepszy sposób. Wklejam fragment kodu, może komuś się przyda. for( int i = 1; i < x.length() + 1; i++ ) { if( x[ i ] == ' ' ) { cout << ""; } else { if( i % 4 == 3 ) { if(( dlugosc % 3 ) == 0 ) { x.insert( i, " " ); } if(( dlugosc % 3 ) == 1 ) { x.insert( i - 2, " " ); } if(( dlugosc % 3 ) == 2 ) { x.insert( i - 1, " " ); } } } } cout << x; cout << "<<<" << endl; return 0;
|
|
« 1 » |