wyświetlanie stringa bez indeksu

0

Cześć, to mój pierwszy post więc dzień dobry wszystkim.

Chciałem zrobić prosty programik piszący zadany wyraz (wyr1) od tyłu i wstawiający wynik do nowego stringa (wyr2).
Nowy wyraz rzeczywiście wstawia się do stringa (wyr2) natomiast wyświetlenie wyrazu możliwe jest tylko wywołeniem nowego stringa (wyr2) wraz ze wskazaniem nr indeksu, a nie samą nazwą nowego stringa. Poniżej kod:

#include <iostream>
#include <string>

using namespace std;

int main()
{
int dlugosc,j=0;
string wyr1,wyr2;

cout << "podaj wyraz" << endl;
getline(cin,wyr1);
dlugosc=wyr1.length();
for (int i=dlugosc-1;i>=0;i--)
    { wyr2[j]=wyr1[i];
      j++;}

cout<<"wyraz 2 "<<wyr2[0]<<wyr2[1]<<wyr2[2]<<wyr2[3]<<endl; // Wyświetla dobrze (próba dla czteroliterowego wyrazu)
cout<<"wyraz 2 "<<wyr2<<endl; //nie wyświetla nic
return 0;

}

Proszę o jakieś sugestie

2
#include <iostream>
#include <string>

using namespace std;

int main()
{
    unsigned long dlugosc;
    string wyr1;
    string wyr2;

    cout << "podaj wyraz" << endl;
    cin >> wyr1;
    dlugosc = wyr1.length();
    for (unsigned long i = dlugosc-1; i>=0; i--)
        wyr2 = wyr2 + wyr1[i];

    cout << "wyraz 2: " << wyr2 << endl;
    return 0;
}
1

Działa, ogromne dzięki

0

Sie wkradl blad ;) No bo przeciez warunek i >= 0 dla unsigned long jest kompletnie bez sensu ;)

#include <iostream>
#include <string>

using namespace std;

int main()
{
    long dlugosc;
    string wyr1;
    string wyr2;

    cout << "podaj wyraz" << endl;
    cin >> wyr1;
    dlugosc = (long) wyr1.length();
    for (long i = dlugosc-1; i>=0; i--)
        wyr2 = wyr2 + wyr1[i];

    cout << "wyraz 2: " << wyr2 << endl;
    return 0;
}

natomiast uzycie [] jest oczywiscie tez mozliwe, ale wtedy trzeba zadbac o to, zeby string mial poprawna dlugosc. W przeciwnym wypadku (gdy indeks jest poza rozmiarem) to dostep do znaku poprzez [] ma status - undefined behavior.

#include <iostream>
#include <string>

using namespace std;

int main()
{
    long dlugosc;
    string wyr1;
    string wyr2;

    cout << "podaj wyraz" << endl;
    cin >> wyr1;
    dlugosc = wyr1.length();
    wyr2.resize(dlugosc);
    for (long i = dlugosc-1; i>=0; i--) {
        wyr2[dlugosc - 1 - i] = wyr1[i];
    }

    cout << "wyraz 2: " << wyr2 << endl;
    return 0;
}

P.S.

Czy da sie edytowac posty?

0

akurat działałem na zwykłych intach bo nie potrzebowałem jakiegoś ogromnego zakresu, więc nie rzutuje

0

Dzięki, jutro od rana przy tym usiądę. Dwa tygodnie temu zacząłem się uczyć programowania, więc znam tylko podstawy podstaw, a klas jeszcze nie przerabiałem. Na teraz chcę w ciągu maks 30 minut rozwiązywać łatwe zadania ze SPOJa i to będzie sygnał na pójście dalej.

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