Manipulacja "Char"
Ostatnio zmodyfikowano 2009-11-19 16:16
Piast Temat założony przez niniejszego użytkownika |
Manipulacja "Char" » 2009-11-18 16:19:35 Jak najprościej przesuwać ,kasować zawartość "char" np: Char string[7]="red-blue";
i chcę wywali "-" tak aby wyszło "redblue" bez myślnika ? |
|
DejaVu |
» 2009-11-18 16:28:59 musisz napisać pętlę, która przepisze wszystkie dalsze znaki bliżej. Pętla może wyglądać np. tak: for( int i = 3; napis[ i ] != '\0'; i++ ) { napis[ i ] = napis[ i + 1 ]; } /edit: A tak nawiasem mówiąc łańcuchy tekstowe kończą się znakiem '\0'. W Twoim przypadku wychodzisz poza zakres tablicy narażając się jednocześnie na to, że program się wysypie. |
|
Elaine |
» 2009-11-18 16:41:37 W Twoim przypadku wychodzisz poza zakres tablicy narażając się jednocześnie na to, że program się wysypie. |
Jak niekompilujący się program może się wysypać? ISO/IEC 14882:2003, 8.5.2.2There shall not be more initializers than there are array elements. [Example: is ill-formed since there is no space for the implied trailing ’\\0’. ] |
Swoją drogą, twój kod tak nie do końca działa - na pewno ma wyjść "redbluee"? Jeśli chcemy usunąć wszystkie wystąpienia '-', to będzie coś w stylu char * temp = std::remove( string, string + strlen( string ), '-' ); * temp = '\0'; a jeśli tylko pierwsze wystąpienie to std::size_t len = strlen( string ); char * temp = std::find( string, string + len, '-' );
ptr = std::copy( ptr + 1, string + len, ptr ); * ptr = '\0'; |
|
DejaVu |
» 2009-11-18 17:43:02 Jak byś nie zauważył to zero zostanie skopiowane i nadpisze ostatni znak :) |
|
Elaine |
» 2009-11-18 18:48:38 A tak, racja, uruchamianie kodu w głowie to zły pomysł ;). ...co nie zmienia faktu, że i tak jest to wymyślanie koła na nowo. |
|
DejaVu |
» 2009-11-18 23:32:28 Ale to jest malutkie koło ;p zresztą... jako jakiś etap programowania powinien docenić oba rozwiązania :) |
|
Piast Temat założony przez niniejszego użytkownika |
» 2009-11-19 11:53:30 dlaczego program po znalezieniu znaku kończy pętlę zamiast szukać następnego ? np: char last_path[ 100 ] = "ble-ble-ble";
for( int i = 0; i <= 100; i++ ) { if( last_path[ i ] == '\55' ) last_path[ i ] = '\245'; } znak '\55' to '-' więc program powinien zamienić dwa znaki ,ale zamienia tylko pierwszy ,gdzie jest błąd ? |
|
DejaVu |
» 2009-11-19 14:02:12 Poczytaj czym się różni zapisywanie pojedyńczego znaku od ciągu znaków. |
|
« 1 » 2 |