Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dodawanie stringów - błąd przy użyciu operatora [] / funkcji at()

Ostatnio zmodyfikowano 2013-06-16 16:19
Autor Wiadomość
haker
Temat założony przez niniejszego użytkownika
Dodawanie stringów - błąd przy użyciu operatora [] / funkcji at()
» 2013-06-16 15:23:31
Witajcie
Napisałem funkcję która dostaje numer litery z alfabetu i zwraca string wyjaśniający która to litera. I tutaj moje pytanie:
Czemu ten kod

C/C++
string litera_alfabetu( int a )
{
    string alfabet( "ABCDEFGHIJKLMNOPQRSTUVWXYZ" );
    string wynik;
   
    if( a <= alfabet.length() )
    {
        wynik = "w alfabecie litera nr ";
        if( a / 10 )
        {
            wynik += '0' + a / 10;
        }
        wynik += '0' + a % 10;
        wynik += " to litera: "; // CHODZI O TO MIEJSCE
        wynik += alfabet[ a - 1 ];
    }
    return wynik;
}

działa poprawnie, a ten już nie?

C/C++
string litera_alfabetu( int a )
{
    string alfabet( "ABCDEFGHIJKLMNOPQRSTUVWXYZ" );
    string wynik;
   
    if( a <= alfabet.length() )
    {
        wynik = "w alfabecie litera nr ";
        if( a / 10 )
        {
            wynik += '0' + a / 10;
        }
        wynik += '0' + a % 10;
        wynik += " to litera: " + alfabet[ a - 1 ]; // CHODZI O TO MIEJSCE
    }
    return wynik;
}

gdy próbuję wykonać program z tym niedziałającym kodem to zamiast żądanej litery alfabetu pojawia się ucięty napis "invalid string position". Próbowałem też z funkcją substr() i z nią działa w jednej linijce ale chciałbym wiedzieć czemu nie działa z [] lub at() :> Czy to po prostu wina klasy string, że mimo iż instrukcje wydają się w obu przypadkach identyczny to nie działa?
P-85687
pekfos
» 2013-06-16 15:36:44
C/C++
" to litera: " + alfabet[ a - 1 ];
To działa, ale nie tak, jak myślałeś.
Powinno być tak:
C/C++
string( " to litera: " ) + alfabet[ a - 1 ];
albo tak:
C/C++
wynik = wynik + " to litera: " + alfabet[ a - 1 ];
P-85688
haker
Temat założony przez niniejszego użytkownika
» 2013-06-16 15:42:06
Dzięki, faktycznie działa :O tylko czemu muszę ująć ten tekst dodatkowo w string() ? można gdzieś o tym poczytać?
Uczę się z Symfonii i tam nic nie było na ten temat.

C++ trudna jenzyk..
P-85689
pekfos
» 2013-06-16 15:44:41
Dlatego, że w wyrażeniu musi być obiekt std::string, aby działy jego operatory.
" to litera: " + alfabet[ a - 1 ];
 to nie sklejanie napisu i znaku, tylko arytmetyka na wskaźnikach (wskaźnik + liczba).
P-85691
haker
Temat założony przez niniejszego użytkownika
» 2013-06-16 16:14:27
skoro tak to czemu
wynik = wynik + " to litera: " + alfabet[ a - 1 ];
 będzie działać? tu jest przecież to samo.

i nie bardzo rozumiem o jakiej liczbie mówisz. chodzi o
alfabet[ a - 1 ];
? z tego co wiem takie wyrażenie zwraca referencję do znaku.
a więc
" to litera: " + alfabet[ a - 1 ];
 to inaczej const char* + referencja do znaku, tak? ta referencja jest w tym przypadku traktowana jako zwykła liczba? :S

proszę o wyjaśnienie ^^
P-85694
pekfos
» 2013-06-16 16:19:41
skoro tak to czemu
wynik = wynik + " to litera: " + alfabet[ a - 1 ];
będzie działać? tu jest przecież to samo.
w wyrażeniu musi być obiekt std::string
wynik jest typu std::string.

ta referencja jest w tym przypadku traktowana jako zwykła liczba?
Wartość tego znaku jest traktowana jako liczba (kod znaku).
P-85696
« 1 »
  Strona 1 z 1