﻿/*
    Karakterláncok (karaktersorok, strings)

    char - 8-bites egész típus, betűt tárolhatunk benne

    char s[100]; // legfeljebb 100 helyett 99 darab karaktert tartalmazó tömb

    Egy szövegdarab úgy lesz tárolva, hogy a karakterei egymás mellé
    kerülnek a tömbben, majd ezeket követi egy 0 értékű bájt.

    Pl.
        char s[100] = "hello, world";

        s[0] s[1] s[2] s[3] s[4] s[5] s[6] s[7] s[8] s[9] s[10] s[11] s[12] ...
        'h'  'e'  'l'  'l'  'o'  ','  ' '  'w'  'o'  'r'  'l'   'd'   '\0'  ...

    Minden betűnek van egy számkódja, mely az ASCII kódolási rendszernek
    megfelelő (ASCII-kód). A megfeleltetéseket lásd az ASCII táblázatban.

    Karakterkonstansok:
        - '' között adjuk meg (ez tulajdonképpen egy-egy szám 8 biten)
            Pl. 'a', 'A', '.', '@'

        - sajátosak (escape sequences)
            '\n' - line feed (újsor)
            '\t' - vízszintes tab
            '\0' - null karakter (ez van a stringek végén)
            '\\' - backslash

    String konstansok:
        - "" között több karakter vagy sajátos escape szekvencia

        Pl. "hello world", "hello\nworld", " ", ""

        - mindegyiknek a végén a memóriában lesz null karakter ('\0')
*/


#include <iostream>
using namespace std;

int main()
{
    /*
    // String-konstansok használata string inicializálására:

    char s1[100] = "hello"; // inicializáltuk az első 6 bájtot
 
    char s2[] = "hello"; // s2 egy 6 elemű tömb lesz

    char s3[6] = "hello";

    // char s4[5] = "hello"; // hiba: nem elég hosszú a tömb
    */


    // Beolvasás, kiírás:
    /*
    char s[100] = "hello";
    cout << s << endl; // kiírja az egész stringet egyszerre (a nullkarakterig)

    cin >> s;
        // beolvas egy stringet egyszerre, megáll az első whitespace-nél
        // (fehér karakternél, pl. space vagy újsor)

    cout << "beolvasva: " << s << endl;
    */
    // Pl. ha beírjuk, hogy "megint teszt", akkor csak a "megint" kerül s-be.

    // Más lehetőség a beolvasásra:
    // cin.get(s, 100);
    // beolvas egy sort, megáll, mikor újsor karaktert talál és
    // azt a bemeneten hagyja. Ha a sor hosszabb, mint 99 karakter,
    // akkor csak az első 99-te teszi a tömbbe (majd ezek után '\0'-t).

    //cin.get(); // beolvas 1 karaktert

    /*
    char s1[100], s2[100];
    cin.get(s1,100);
    cin.get();
    cin.get(s2,100);

    cout << "ezeket olvastuk:"<<endl;
    cout << s1 << endl;
    cout << s2 << endl;
    */

    // HF. Kérjünk be egy vezeték és keresztnevet, majd írjuk
    // ki egy sorba. 

    /*
    char s1[100], s2[100];
    cout << "Vezeteknev: ";
    cin.get(s1,100);
    cin.get();
    cout << "Keresztnev: ";
    cin.get(s2,100);

    cout << "Teljes nev: ";
    cout << s1 << " " << s2 << endl;
    */

    // Ismét más lehetőség a beolvasásra:
    /*
        cin.getline(str, 100);
            - a get-től abban különbözik, hogy elfogyasztja a sor végén
            levő újsor karaktert (de nem rakja bele str-be).
    */
    // Pl.
    /*
    char s1[100], s2[100];
    cout << "Vezeteknev: ";
    cin.getline(s1,100);
    cout << "Keresztnev: ";
    cin.getline(s2,100);

    cout << "Teljes nev: ";
    cout << s1 << " " << s2 << endl;
    */

    return 0;
}
