String wyrzuca znaki pomimo zadeklarowania 0

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;
}
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.

0

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

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';
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();
}

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