magda_19 Temat założony przez niniejszego użytkownika |
Rozwijanie znaków w programie » 2019-08-11 19:27:12 Witam, próbuję napisać program, który rozwinie wyraz z postaci A4BD na postać AAAABD. Ma ktoś pomysł jak to zrobić. Napisałam trochę kodu, ale mój program nie chce rozwijać wyrazu. #include <iostream> #include <string>
using namespace std;
int main() { string wyraz = "A4BD"; int dlugoscWyrazu = wyraz.length(); int liczba; char znak; for( int i = 0; i < dlugoscWyrazu; i++ ) { if( wyraz[ znak ] == liczba ) { while( liczba == wyraz[ znak ] ) { wyraz[ znak ] ++; } } } cout << wyraz; return 0; } [ \c pp ]
|
|
pekfos |
» 2019-08-11 19:50:15 Przejdź po wszystkich znakach i jeśli znak nie jest cyfrą (liczbą?), to go wypisz. A jeśli jest liczbą, to wypisz poprzedni znak n - 1 razy. Mogę najwyżej zgadywać, czy takie były intencje przy pisaniu kodu, bo sam kod to niepojęte bzdury. Do decydowania czy znak jest liczbą możesz użyć prostego warunku testującego, czy znak jest w odpowiednim zakresie - intuicyjnie między '0' a '9', lub użyć gotowej funkcji isdigit() z <cctype>. |
|
magda_19 Temat założony przez niniejszego użytkownika |
» 2019-08-11 21:25:41 A jaki dać warunek w pętli while? Na razie mam coś takiego: #include <iostream> #include <string> #include <cctype>
using namespace std;
int main() { string wyraz = "A4BD"; int dlugoscWyrazu = wyraz.length(); int liczba; char znak; for( int i = 0; i < dlugoscWyrazu; i++ ) { if( wyraz[ i ] == isdigit( wyraz[ i ] ) ) { while() { cout << wyraz[ i - 1 ] << " "; } } else { } } return 0; }
[ \c pp ] |
|
pekfos |
» 2019-08-11 22:04:13 Prościej for. if( wyraz[ i ] == isdigit( wyraz[ i ] ) )
|
Wciąż źle. Może najpierw zrób bez isdigit()? Rozumiejąc co robisz tu, nie będziesz mieć problemu z napisaniem pętli. |
|
magda_19 Temat założony przez niniejszego użytkownika |
» 2019-08-12 00:14:24 Mam coś takiego. Tylko nadal nie działa. Nie wypisuje tyle liter ile powinien #include <iostream> #include <string> #include <cctype>
using namespace std;
int main() { string wyraz = "A4BD3"; int dlugoscWyrazu = wyraz.length(); int liczba; char znak; for( int i = 0; i < dlugoscWyrazu; i++ ) { if(( isdigit( wyraz[ i ] ) ) ) { while( wyraz[ i ] -- ) { } cout << wyraz[ i - 1 ]; } else { cout << wyraz[ i ]; } } return 0; }
[ \c pp ] |
|
YooSy |
» 2019-08-12 00:38:00 for( int i = 0; i < dlugoscWyrazu; i++ ) { if(( isdigit( wyraz[ i ] ) ) ) { while( wyraz[ i ] -- ) { cout << wyraz[ i - 1 ]; } } else { cout << wyraz[ i ]; } }
Zabezpiecz się przed sytuacją, np. 4Abc3, gdzie pierwsza jest liczba, bo wyjdziesz poza tablicę. Zastanów się czy nie będzie potrzeby obsłużyć, np. A12B5, bo wtedy ten sposób nie zadziała. |
|
magda_19 Temat założony przez niniejszego użytkownika |
» 2019-08-19 01:02:05 Mam coś takiego, ale jeszcze nie działa #include <iostream> #include <string> #include <cctype>
using namespace std;
int main() { string wyraz = "A4B3"; int dlugoscWyrazu = wyraz.length(); for( int i = 0; i < dlugoscWyrazu; i++ ) { if( isdigit( wyraz[ i ] ) ) { while( wyraz[ i ] -- ) { wyraz[ i ] - '0'; --wyraz[ i ]; cout << wyraz[ i - 1 ]; } } else { cout << wyraz[ i ]; } } return 0; } [ \c pp ] |
|
pekfos |
» 2019-08-19 07:07:39 while( wyraz[ i ] -- ) { wyraz[ i ] - '0'; --wyraz[ i ]; cout << wyraz[ i - 1 ]; } |
Kompletnie bez sensu. Najpierw oblicz ile masz wykonać powtórzeń, a potem je wykonaj najbardziej typowym for, który w kodzie już masz użyte poprawnie, więc nie powinno być problemu. Nie używaj skrótowych zapisów jak te twoje while, jeśli nie masz pojęcia co robisz. |
|
« 1 » |