Tablice znakowe - znak przestankowy NULL
Ostatnio zmodyfikowano 2013-07-03 20:08
Totalq Temat założony przez niniejszego użytkownika |
Tablice znakowe - znak przestankowy NULL » 2013-07-03 16:24:16 Mam pewien problem. Pragnę skopiować z jednej tablicy znakowej tekst do drugiej. Patent polega na tym, że kopiowanie tekstu ma skończyć się dopiero gdy program napotka na dwie spacje (czyli dwa 0) w sąsiedztwie. Niestety program nie zachowuje się prawidłowo. Przerabiałem kod na wszelkie możliwe sposoby, ale efektu brak. #include <iostream> #include <string> using namespace std;
void wpisz( char tablica[], char tablica_v2[] );
main() { const int a = 24; char tablica[] = { "TO BEDZIE KOPIOWANE A TO JUZ NIE" }; char tablica_v2[ a ] = { 0 }; wpisz( tablica, tablica_v2 ); for( int i = 0; i < a; i++ ) { cout << tablica_v2[ i ]; } }
void wpisz( char tablica[], char tablica_v2[] )
{ int x = 0; for( int i = 0;; i++ ) { tablica_v2[ x ] = tablica[ x ]; if( tablica[ x ] == 0 ) { if( tablica[( x + 1 ) ] == 0 ) { cout << endl << "Koniec stringu" << endl; #define var 1 } } x++; #if ( var == 1 ) break; #endif }
|
|
Savail |
» 2013-07-03 16:29:24 spacja w C++ to po prostu znak char c = ' '; a nie 0. |
|
DejaVu |
» 2013-07-03 16:31:03 0 to znak terminalny: char znak = '\0'; .
32 to spacja: char znak = ' '; .
|
|
Totalq Temat założony przez niniejszego użytkownika |
» 2013-07-03 20:05:52 Patrząc teraz na swój program dostrzegam dość śmieszną rzecz.
if( tablica[( x + 1 ) ] == ' ' ) { cout << endl << "Koniec stringu" << endl; #define fgh 1 } else cout << "a";
}
x++; #if ( fgh == 1 )
break; #endif
Skoro #define jest dyrektywą preprocesora, to czy mogę jej użyć w podany sposób? Wydaję mi się, że to głupoty są, w końcu dyrektywa #if również musi być odpowiednio zdefiniowana(?) jeszcze przed kompilacją, a ja ją traktuje jako coś w rodzaju normalnej funkcji. Mam rację? [EDIT] Czasem wystarczy coś odstawić na jakiś czas a rozwiązanie samo wpadnie ;) Wystarczyło wyrzucić te ferelne dyrektywy i dodać zwykły warunek if z dodatkową zmienną. |
|
pekfos |
» 2013-07-03 20:08:58 Możesz jej tak użyć, ale nie robi tego, czego chyba oczekujesz. Jeśli chcesz zakończyć pętlę, gdy fgh jest równe 1, to użyj zwykłego warunku (po to jest). W twoim kodzie break wykona się niezależnie od wartości fgh. |
|
« 1 » |