Wątek przeniesiony 2019-08-11 22:07 z przez kq.

Jak rozwinąć wyraz

3
Magda Pietrzykowska napisał(a):

A jaki byłby problem jeśli w wyrazie pojawiłyby się liczby?

Liczby jednocyfrowe to też liczby, ale domyślam się, że w tym pytaniu chodziło Ci o te wielocyfrowe. Pewnie problem byłby taki, że w Twojej wersji programu każda cyfra w wejściowym stringu będzie oznaczała, ile razy poprzedzający ją znak (niekoniecznie litera) pojawi się w wyjściowym stringu. Więc każda cyfra, która nie jest na pierwszej pozycji w liczbie, będzie oznaczała, ile razy poprzedzająca ją cyfra pojawi się w wyjściowym stringu.

Przykład:

Input: A23BC
Output: AA222BC
0
Burmistrz napisał(a):
Magda Pietrzykowska napisał(a):

A jaki byłby problem jeśli w wyrazie pojawiłyby się liczby?

Liczby jednocyfrowe to też liczby, ale domyślam się, że w tym pytaniu chodziło Ci o te wielocyfrowe. Pewnie problem byłby taki, że w Twojej wersji programu każda cyfra w wejściowym stringu będzie oznaczała, ile razy poprzedzający ją znak (niekoniecznie litera) pojawi się w wyjściowym stringu. Więc każda cyfra, która nie jest na pierwszej pozycji w liczbie, będzie oznaczała, ile razy poprzedzająca ją cyfra pojawi się w wyjściowym stringu.

Przykład:

Input: A23BC
Output: AA222BC

O tym nie pomyślałam. Wiesz może jak to ogarnąć?

0
Magda Pietrzykowska napisał(a):

O tym nie pomyślałam. Wiesz może jak to ogarnąć?

Moim zdaniem to powinno wynikać z treści zadania. Czy treść mówi o liczbach, cyfrach, jakoś to precyzuje?

0
Silv napisał(a):
Magda Pietrzykowska napisał(a):

O tym nie pomyślałam. Wiesz może jak to ogarnąć?

Moim zdaniem to powinno wynikać z treści zadania. Czy treść mówi o liczbach, cyfrach, jakoś to precyzuje?

Tylko jest napisane, aby wziąć to pod uwagę...

1

Pytanie brzmi czy musisz to pisać w ten sposób, czy np. możesz użyc http://www.cplusplus.com/reference/regex/ bo, wbrew temu co sie wydaje niektórym początkującym, biblioteki i mechanizmy języka są po to, zeby ułatwić pracę.

0
Shalom napisał(a):

Pytanie brzmi czy musisz to pisać w ten sposób, czy np. możesz użyc http://www.cplusplus.com/reference/regex/ bo, wbrew temu co sie wydaje niektórym początkującym, biblioteki i mechanizmy języka są po to, zeby ułatwić pracę.

Chcę to napisać jak najłatwiejszym sposobem, abym mogła zrozumieć, a zaznaczę, że jestem początkująca

Mam coś takiego, jednak nie wiem dlaczego nie wypisuje tyle znaków 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;
}
1

Chcę to napisać jak najłatwiejszym sposobem, abym mogła zrozumieć, a zaznaczę, że jestem początkująca

Tylko że właśnie najłatwiejszy sposób wymaga douczenia się takich rzeczy jak choćby te wspomniane regexy. Bo teraz to jest trochę tak jakbyś miała policzyć ile to będzie jak milion razy dodasz do siebie liczbę 2. My sugerujemy żeby przeczytała jak się mnoży, a ty próbujesz zrobić to najłatwiejszym sposobem, którym wg ciebie jest dodawanie po kolei...

Wbrew pozorom to co chcesz zrobić, korzystając tylko z podstawowych elementów składni, jest skomplikowane. Dużo bardziej niż ten kod który wstawiłaś, bo on zwyczajnie nie działa poprawnie.

0
Shalom napisał(a):

Chcę to napisać jak najłatwiejszym sposobem, abym mogła zrozumieć, a zaznaczę, że jestem początkująca

Tylko że właśnie najłatwiejszy sposób wymaga douczenia się takich rzeczy jak choćby te wspomniane regexy. Bo teraz to jest trochę tak jakbyś miała policzyć ile to będzie jak milion razy dodasz do siebie liczbę 2. My sugerujemy żeby przeczytała jak się mnoży, a ty próbujesz zrobić to najłatwiejszym sposobem, którym wg ciebie jest dodawanie po kolei...

Wbrew pozorom to co chcesz zrobić, korzystając tylko z podstawowych elementów składni, jest skomplikowane. Dużo bardziej niż ten kod który wstawiłaś, bo on zwyczajnie nie działa poprawnie.

Skoro tak to wygląda, to idę się douczać

0

Jeśli bardzo chcesz to robić ręcznie to musisz mieć drugą pętlę, która będzie skanować "całą liczbę" po napotkaniu cyfry. W ogóle nie dawałbym tu pętli for tylko while, bo będzie wygodniej, więc finalnie byłaby główna pętla while (zamiast twojego fora), a w środku while do pobrania całej liczby i kolejny while do wypisania zdekompresowanego ciagu znaków.

0
Magda Pietrzykowska napisał(a):

nie wiem dlaczego nie wypisuje tyle znaków ile powinien

Tak wygląda mój pomysł:

Dla każdego znaku:
    Jeżeli jest cyfrą:
        Pomnóż zapamiętaną liczbę przez 10 i dodaj aktualną cyfrę
    Jeżeli nie jest cyfrą:
        Jeżeli zapamiętana liczba ma wartość większą od 0:
            Wyświetl literę znajdującą się przed liczbą tyle razy, ile wynosi zapamiętana liczba minus 1
            Wyzeruj zapamiętaną liczbę
        Wyświetl aktualny znak    

Działa w C#, więc jeżeli zaimplementujesz to w C++, to też będzie działać. Nie musisz zapamiętywać litery znajdującej się przed liczbą, jeżeli będziesz pamiętała ilość cyfr w liczbie lub będziesz pamiętała liczbę jako string zamiast int. Dzięki temu uzyskasz indeks ostatnio odwiedzonej litery odejmując ilość cyfr i 1 od aktualnego indeksu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0