Dodawanie stringów - błąd przy użyciu operatora [] / funkcji at()
Ostatnio zmodyfikowano 2013-06-16 16:19
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 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: "; wynik += alfabet[ a - 1 ]; } return wynik; } działa poprawnie, a ten już nie? 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 ]; } 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? |
|
pekfos |
» 2013-06-16 15:36:44 " to litera: " + alfabet[ a - 1 ];
To działa, ale nie tak, jak myślałeś. Powinno być tak: string( " to litera: " ) + alfabet[ a - 1 ];
albo tak: wynik = wynik + " to litera: " + alfabet[ a - 1 ];
|
|
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.. |
|
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). |
|
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 ^^ |
|
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). |
|
« 1 » |