• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Program/funkcja odwracająca napis

VPS Starter Arubacloud
0 głosów
887 wizyt
pytanie zadane 6 lutego 2016 w C i C++ przez Dronojad Obywatel (1,980 p.)

Witam. Próbuję rozwiązać pewne zadanie programistyczne, potrzebne mi jest do tego między innymi odwrócenie napisu "od tyłu" i zapisanie  go do zmiennej. Oto co napisałem:

#include <iostream>

using namespace std;

int odwracanie(string napis)
{
    string normalny = napis;
    string odwrocony;

    int dlugosc=napis.length();

    int j=0;
    for(int i=dlugosc-1; i>=0; i--)
    {
        napis[i]=odwrocony[j];
        j++;
    }

    cout << normalny;
    cout << odwrocony;

}

int main()
{
    string s="Napis";
    odwracanie(s);
}

Niestety program zwraca jedynie "Napis", odwróconej wartości już nie. 

Proszę o jakieś wskazówki.

4 odpowiedzi

+3 głosów
odpowiedź 6 lutego 2016 przez Szykem2 Nałogowiec (29,510 p.)
wybrane 6 lutego 2016 przez Dronojad
 
Najlepsza

Nie rozumiem czemu funkcja ma zwracać inta, a poza tym nie zwraca nic.

//Zmień
int odwracanie (string napis)
//na
string odwracanie(string napis)

//i przed zamknięciem bloku funkcyjnego dodaj
return odwrocony;

//teraz w mainie możesz użyć
string odw = odwracanie(s);
cout << odw << endl;

A co do twojego problemu. Odwołujesz się do nieistniejącego indexu w stringu, a do tego istniejącemu napisowi przypisujesz wartość nieistniejącego odwrócony linikę 15 zamień na

odwrocony += napis[i];
komentarz 6 lutego 2016 przez Dronojad Obywatel (1,980 p.)
Dzięki wielkie. Wszystko działa.

Mam świadomość tego, że popełniam podstawowe błędy, no ale cóż, cały czas się uczę :)
+3 głosów
odpowiedź 6 lutego 2016 przez Sebastian Fojcik Nałogowiec (43,020 p.)

Piszę tę wiadomość jako ciekawostkę. (to nie jest rozwiązanie Twojego problemu)

Jeśli poduczysz się trochę obsługi klasy string, to nie będziesz musiał tego sam pisać Nie zachęcam Cię do korzystania ze sztuczki, którą Ci zaraz pokażę, bo na początku najlepiej jest napisać własną funkcję, a później korzystać z gotowych rozwiązań.
Niemniej jednak, spójrz tylko jakie to proste :-)

string napis = "Ala ma kota";

// Odwrócenie w jednej linijce.
napis = string( napis.rbegin(), napis.rend() );

cout << napis;

Wykorzystuję tutaj konstruktor klasy string. Ot taka ciekawostka :-)

komentarz 6 lutego 2016 przez Dronojad Obywatel (1,980 p.)
Dzięki za sztuczkę, na pewno się przyda.
0 głosów
odpowiedź 6 lutego 2016 przez niezalogowany
edycja 6 lutego 2016

napis[i]=odwrocony[j];

to powinno być chyba na odwrót.

odwrocony[j]=napis[i];

ps: Tu chodzi o coś jeszcze.

ps2: Tutaj masz kod, który działa - poprawiony.

http://pastebin.com/cdAtGbX7

komentarz 6 lutego 2016 przez Dronojad Obywatel (1,980 p.)
Niestety nie działa, program jedynie się wysypuje.
komentarz 6 lutego 2016 przez niezalogowany
Mi się nie wysypuje, wstukaj całość co Tobie dałem. Nie potrzebnie zapisywałeś tamto do zmiennych, mogłeś od razu wynotowywać. Masz w edycji link (http://pastebin.com/cdAtGbX7)

ps. No jeszcze te niepotrzebne zmienne zapomniałem wyrzucić ale to już sobie poradzisz.
komentarz 6 lutego 2016 przez Dronojad Obywatel (1,980 p.)
Dzięki wielkie, działa :)
komentarz 6 lutego 2016 przez niezalogowany
Nie ma sprawy ;)
–2 głosów
odpowiedź 6 lutego 2016 przez adojado Początkujący (420 p.)
#include using namespace std; int odwracanie(string napis) { string normalny = napis; string odwrocony; int dlugosc=normalny.length(); int j=0; for(int i=dlugosc-1; i>=0; i--) { odwrocony[j]=normalny[i]; j++; } cout << normalny; cout << odwrocony; } int main() { string s="Napis"; odwracanie(s); } no ja bym sprobował tak
komentarz 6 lutego 2016 przez secsec Mądrala (7,250 p.)
Hehe, gorzej wklejonego kodu na tym forum nie widziałem. Nawet go nie czytam, czy poprawnie czy nie.
komentarz 6 lutego 2016 przez adojado Początkujący (420 p.)
heh no sorry tak wyszło jak skopiowałem na tele twój i zmieniłem conieco :-P

Podobne pytania

+1 głos
2 odpowiedzi 397 wizyt
pytanie zadane 10 kwietnia 2015 w C i C++ przez M4tthew Gaduła (4,480 p.)
0 głosów
1 odpowiedź 3,543 wizyt
pytanie zadane 25 czerwca 2018 w C i C++ przez Białozór Użytkownik (750 p.)
0 głosów
2 odpowiedzi 1,163 wizyt
pytanie zadane 2 marca 2016 w C i C++ przez sebask08 Użytkownik (510 p.)

92,455 zapytań

141,263 odpowiedzi

319,100 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...