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

Rozwijanie znaków w programie

Ostatnio zmodyfikowano 2019-08-19 07:07
Autor Wiadomość
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.

C/C++
#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 ]
P-175001
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>.
P-175003
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:

C/C++
#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
        {
            //cout << wyraz[i] << " ";
        }
    }
   
    return 0;
}

[ \c pp ]
P-175007
pekfos
» 2019-08-11 22:04:13
Prościej for.

C/C++
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.
P-175008
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

C/C++
#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 ]
P-175009
YooSy
» 2019-08-12 00:38:00
C/C++
for( int i = 0; i < dlugoscWyrazu; i++ )
{
    if(( isdigit( wyraz[ i ] ) ) )
    {
        while( wyraz[ i ] -- ) // natomiast tutaj dekrmentujesz wartość int(wyraz[i]), który wynosi 52 dla '4' (tab. ASCII)
        // odejmuj (wyraz[i] - '0') i poza tym predekrementuj, bo przy post wypiszesz o jeden znak za dużo
        {
            cout << wyraz[ i - 1 ];
        }
        // cout << wyraz[ i - 1 ]; <-- to powinno wewnątrz ciała pętli
    }
    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.
P-175010
magda_19
Temat założony przez niniejszego użytkownika
» 2019-08-19 01:02:05
Mam coś takiego, ale jeszcze nie działa

C/C++
#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 ]
P-175059
pekfos
» 2019-08-19 07:07:39
C/C++
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.
P-175060
« 1 »
  Strona 1 z 1