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 »  |