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

Tablice znakowe - znak przestankowy NULL

Ostatnio zmodyfikowano 2013-07-03 20:08
Autor Wiadomość
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.

C/C++
#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 //var
       
       
    }

P-86903
Savail
» 2013-07-03 16:29:24
spacja w C++ to po prostu znak
char c = ' ';
 a nie 0.
P-86904
DejaVu
» 2013-07-03 16:31:03
0 to znak terminalny:
char znak = '\0';
.
32 to spacja:
char znak = ' ';
.
P-86905
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.

C/C++
//kawałek programu

if( tablica[( x + 1 ) ] == ' ' )
{
    cout << endl << "Koniec stringu" << endl;
    #define fgh 1
   
}
else
     cout << "a";


}

x++;
#if ( fgh == 1 )

break;
#endif //fgh

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ą.
P-86912
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.
P-86913
« 1 »
  Strona 1 z 1