String wyrzuca znaki pomimo zadeklarowania 0

Odpowiedz Nowy wątek
2019-03-06 06:39
0

Potrzebuję zwrócić 4 znaki A, z pierwotnego stringa "A4". Pomimo zadeklarowania ostatniego znaku jako 0 program zwraca 0x6efde0.

#include <iostream>

using namespace std;

int main()
{
    string wyraz="A4";
    int j=0;
    string litera;
    litera=wyraz[j];

    int cyfra=wyraz[j+1]-48;
    string nowaZmienna[cyfra];
    nowaZmienna[cyfra+1]="0";

    for(int i=0;i<cyfra;i++)
    {
        nowaZmienna[i]=litera;
    }
        cout<<nowaZmienna<<endl;
    return 0;
}
edytowany 1x, ostatnio: kq, 2019-03-06 06:43

Pozostało 580 znaków

2019-03-06 06:46
kq
1
string nowaZmienna[cyfra];

To nie jest poprawny C++, bo C++ nie ma VLA (tablic o dynamicznym rozmiarze). Użyj std::vector.

nowaZmienna[cyfra+1]="0";

Zapis za ostatnim elementem tablicy, UB.

cout<<nowaZmienna<<endl;

nowaZmienna to tablica stringów, a nie string, więc wypisywany jest adres pierwszego elementu.


Pozostało 580 znaków

2019-03-06 07:54
0

Z tego co pamiętam C++ to znak końca stringa to "\0"


'\0' jak już, i t jeśli mowa o C-stringach, ale - tak w ogóle - jaki to ma związek z tematem? - kq 2019-03-06 07:57

Pozostało 580 znaków

2019-03-06 09:46
DRK
0

Zapomniałeś o #include <string>.
Ten kod działa, gdy liczba powtórzeń jest jednocyfrowa:

char litera = wyraz[0];
int cyfra = wyraz[1] - '0';
string nowaZmienna(cyfra, litera);
cout << nowaZmienna << '\n';

Pozostało 580 znaków

2019-03-06 11:45
2
std::string rleStringDecode(const std::string &encoded)
{
    std::istringstream input { encoded };
    std::ostringstream output;
    char ch;
    int count;
    while (input >> ch >> count)
         output << std::string(count, ch);
    return output.str();
}

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 2x, ostatnio: MarekR22, 2019-03-06 11:48

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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