3 4tab char i wielowymiarowe

background image

Tablice znakowe

Wojtek Mierzwa

background image

Nie da się

Tablice do przechowywania znaków.

Char zdanie[80];

Kod ASCII – tablica znaków

Ciąg liter zakończony znakiem 0 (zero)

(null).

background image

Inicjacja tablicy znaków

Char zdanie [80] = { „lot”};

Znak null został automatycznie dopisany po
ostatniej literze t dzięki temu, że
zainicjowaliśmy tablicę ciągiem znaków
ograniczony cudzysłowem.

l

o

t

null

0 1 2

3 4

...

...

80

background image

Inny sposób

Char zdanie [80] = {'l', 'o', 't'};

To to samo co:

Zdanie [0] = 'l';

Zdanie [1] = 'o';

Zdanie [2] = 't';

reszta elementów wypełniona zerami.

background image

Jak sprawdzić długość

C-stringu??

char napis1[] = { "Nocny lot"} ;
char napis2[] = { 'N', 'o', 'c', 'n', 'y',
' ', 'l', 'o', 't' } ;
cout << "rozmiar tablicy pierwszej : "
<< sizeof(napis1) << endl ;

cout << "rozmiar tablicy drugiej : "
<< sizeof(napis2) << endl ;

background image

Błędy

Char t1[1] = { „a”};

Char t1[1] = { ' a '};

Wpisanie do tablicy znakowej teksu jest

możliwe tylko w czasie inicjacji.

Błędny zapis:
zdanie [80] = „nocny lot”;
zdanie = „nocny lot”;

background image

Jak to zrobić??

Tworzymy funkcje, która wpisują nam znak po
znaku do tablicy.

Zajmuje się tym biblioteka standardowa w paru
wariantach.

Kopiujemy znak po znaku aż do znalezienia znaku
null (0).

void strcpy(char cell[], char zrodlo[])
{ for (int i = 0; ; i++)

{cel[i] = zrodlo[];
if (cel[i] == 0) break;
}}

background image

Strcpy

Char start [] = {„Liczba uczestników na

starcie = 79”};

Char meta[80];

strcpy(meta, start);
Cout << meta;

background image

Strncpy

Aby się zabezpieczyć przed samym sobą.

Kiedy pomylimy się i będziemy chcieli

wpisać tablicę znaków o rozmiarze [80] do
tablicy np. [5].??

background image

Strncpy

Aby zabezpieczyć się przed błędami,

możemy stosować funkcję

StrNcpy

background image

#include <iostream>
using namespace std ;

#include <cstring>

int main()
{
char tekst[] = { "Uwaga, tarcza zostala przepalona !"} ;
char komunikat[120] ;

strcpy(komunikat, tekst);
cout << komunikat << endl ;

strncpy(komunikat, "1234567890abcdef" , 9 ); //

cout << komunikat ;

strcpy(komunikat, "--A ku-ku --!" ) ;
cout << "\nNa koniec : " << komunikat << endl ;
}

background image

C-string

Nic trudnego.

Po prostu znaki ustawione jeden po drugim,

a na ich końcu znak null (bajt zerowy (0);

Nazwa C-stringu to adres miejsca w

pamięci gdzie się on zaczyna.

Zapowiedz wskaźników.

background image

Tablice wielowymiarowe

Tablice tablic to tablice wielowymiarowe.

Int wielo[2] [2];

czytamy: tablica wielo jest dwuelementową

tablicą, z których każdy jest
dwuelementową tablicą liczb typu int.

background image

Inny zapis

W pascalu zapisywaliśmy:

wielo[i , j];

my zapisujemy w c++:

wielo [i] [j];

def:

typ_elementu nazwa_tablicy [wymiar_1][wymiar_2][wymiar_3] . . . ;

background image

Przykład

ddd [4] [2].

ddd [0] [0]

ddd [0] [1]

ddd [1] [0]

ddd [1] [1]

ddd [2] [0]

ddd [2] [1]

ddd [3] [0]

ddd [3] [1]

background image

Inicjacja tablicy wielo

Elementy tablicy wielowymierowej

umieszczane są kolejno w pamięci
komputera tak, że najszybciej zmieniają się
najbardziej skrajny prawy indeks.

Tablica jest przechowywana „rzędami”.

background image

Inicjacja tablicy wielo

Int wielo [4] [2] = {10, 20, 30, 40 ,50, 60,

70, 80};

ddd [0] [0] = 10;

ddd [0] [1] = 20;

ddd [1] [0] = 30;

ddd [1] [1] = 40;

ddd [2] [0] = 50;

ddd [2] [1] = 60;

ddd [3] [0] = 70;

ddd [3] [1] = 80;

background image

Przykłady inicjacji

int tab[ 10 ]; // ¬ sama definicja bez inicjalizacji

int tab_inicjalizowana[ 10 ] = { 20, -3, 12, 1, 0, 7, -5, 100, 2, 5 };

char tab_znakow[ 5 ] = { ‘a’, ‘B’, ‘\n’, ‘1’, ‘\0’ };

float macierz_A[ 3 ][ 2 ] = { {1,1}, {3.5,7.0}, {-15,100} };

float macierz_B[ 3 ][ 2 ] = { 1, 1, 3.5, 7.0, -15, 100 };

background image

Przykłady

Kostka rubika

background image

Kostka rubika

char kostka_Rubika [ 3 ][ 3 ][ 3 ];

background image

Przesyłanie tablicy

wielowymiarowej do funkcji

Wszystkie tablice przesyłane są do funkcji

przez referencje.

background image

Odbieranie tablicy przez funkcję

Co funkcja musi wiedzieć o tablicy:

Typ elementów tej tablicy

Po drugie – aby funkcja mogła łatwo obliczać sobie,
gdzie w pamięci jest określony element tablicy – na
przykład: gdzie w stosunku do tablicy jest

element [1][15] – musi znać liczbę kolumn w tej

tablicy.

Błędny zapis:

void fff (long m[] [] []);

background image

Przyszłość

O czym trzeba pamiętać

Nie umieszczać nic w elementach poza

tablicą.

Tablica ma stałe rozmiary, nie możemy jej

tak nagle powiększyć.

W bibliotece standardowej C++ umieszczono definicje

nowych typów (klas), które nie tylko imitują tablice,
ale mają pewien rodzaj inteligencji i same dbają o
rozmiar takiej tablicy.

background image

BIBLIOGRAFIA

•Jerzy Grębosz „Symfonia C++ Standard
wydanie 2006

•Krótki kurs C++ Część IVAutor: Darek
Ostolski


Wyszukiwarka

Podobne podstrony:
geosyntetyki char.wlk.porów, PG Budownictwo, sem. 7 BWM, Geosyntetyki w Budownictwie, Laboratorium
ME CHAR MECH
char
IZOLACYJNOŚĆ TERMICZNA WIELOWARSTWOWYCH PRZEGRÓD BUDOWLANYCH
char czas przekaznikow
Zestaw 2 Jednowymiarowe ustalone przewodzenie ciepła przez ściankę płaską wielowarstwową
(11253) char rynku
bramki char
11 skuklinska char dz firmy
istan Wiertarka wielowrzecionowa, BHP, Instrukcje-Stanowiskowe
Izolacyjność termiczna wielowarstwowych przegród budowlanych, budownictwo ogólne
NS char sheet gray, Podręczniki RPG, -= Neuroshima =-
Wielowymiarowa Geneza Zaburzeń Przystosowania Społecznego
char szybkościowa sprawko

więcej podobnych podstron