Stringek - karakterek és karaktersorok feldolgozása

Feladatok

1. Adott egy karakter. Döntsük el, hogy betű (kicsi/nagy), számjegy, vagy más karakter-e és írjunk ki megfelelő üzenetet! (“kisbetu”, “nagybetu”, “szamjegy”, “mas”)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;

int main()
{
    char c;
    cin >> c;

    if (c >= '0' && c <= '9')
        cout << "szamjegy" << endl;
    else if (c >= 'a' && c <= 'z')
        cout << "kisbetu" << endl;
    else if (c >= 'A' && c <= 'Z')
        cout << "nagybetu" << endl;
    else
        cout << "mas" << endl;

    return 0;
}

2. Adott egy karakter. Döntsük el, hogy magánhangzó-e, mássalhangzó, vagy nem betű (“maganhangzo”, “massalhangzo”, “nem betu” üzeneteket kiírva).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;

int main()
{
    char c;
    cin >> c;

    if ((c >= 'a' && c <= 'z')
        || (c >= 'A' && c <= 'Z'))
    {
        if (c=='a' || c=='e' || c=='i' || c=='o'
            || c=='u' || c=='A' || c=='E'
            || c=='I' || c=='O' || c=='U')
        {
            cout << "maganhangzo" << endl;
        }
        else {
            cout << "massalhangzo" << endl;
        }
    }
    else
        cout << "nem betu" << endl;

    return 0;
}

Vagy:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
using namespace std;

int main()
{
    char c;
    cin >> c;

    char maganhangzok[11] = "aeiouAEIOU";

    if ((c >= 'a' && c <= 'z')
        || (c >= 'A' && c <= 'Z'))
    {
        bool talalt = false;
        for (int i = 0; i < 10; i++)
            if (c == maganhangzok[i])
                talalt = true;

        if (talalt)
            cout << "maganhangzo" << endl;
        else
            cout << "massalhangzo" << endl;
    }
    else
        cout << "nem betu" << endl;

    return 0;
}

3. Adott egy kisbetű, írjuk ki a nagybetű megfelelőjét!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;

int main()
{
    char c;
    cin >> c;

    /*
    cout << (char) ('A' + (c - 'a')) << endl;
    cout << (char) (c - ('a' - 'A')) << endl;
    */

    char eredmeny = 'A' + (c - 'a');
    cout << eredmeny << endl;

    return 0;
}

4. (HF) Írjunk függvényt, ami visszatéríti egy paraméterként megkapott karaktersor hosszát.

1
2
3
4
5
6
7
8
9
int hossz(char s[])
{
    int i = 0;

    while (s[i] != '\0')
        i++;

    return i;
}

5. Írjunk függvényt, ami adott string-et lemásol egy másik tömbbe.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;

void masol(char hova[], char mit[])
{
    int i = 0;

    while (mit[i] != '\0') {
        hova[i] = mit[i];
        i++;
    }

    hova[i] = '\0';
}

int main()
{
    char a[100] = "mikulas";
    char b[100] = "xxxxxxxxxxxxxxxxxxxx";

    masol(b,a);

    cout << b << endl;

    return 0;
}

6. Írjunk függvényt, ami egy karaktersorhoz hozzáragaszt egy másikat!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
using namespace std;

void ragaszt(char mihez[], char mit[])
{
    int i=0;
    while (mihez[i]!='\0')
        i++;
    int j=0;
    while (mit[j]!='\0'){
        mihez[i]=mit[j];
        i++; j++;
    }
    mihez[i]='\0';
}

int main()
{
    char a[100] = "hello, ";
    char b[100] = "Lajos";

    ragaszt(a, b);

    cout << a << endl; // hello, Lajos

    return 0;
}

7. Írjunk programot, amely két karaktersort összehasonlít (szótári sorrend szerint). Az eredmény legyen:

Példák

    "a", "korte"              -1
    "almafagyökér", "korte"   -1
    "alma", "abc"             +1
    "alma", "almafa"          -1
    "alma", "alma"             0
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
int hasonlit(char a[], char b[])
{
    int i = 0;
    while (a[i] != '\0' && b[i] != '\0') {
        if (a[i] > b[i]) return +1;
        else if (a[i] < b[i]) return -1;

        i++;
    }

    if (a[i] == '\0') {
        if (b[i] == '\0')
            return 0;
        else
            return -1;
    }
    else
        return +1;

    return 0;
}

Vagy:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
int hasonlit(char a[], char b[])
{
    int i = 0;
    while (a[i] != '\0' || b[i] != '\0') {
        if (a[i] > b[i]) return +1;
        else if (a[i] < b[i]) return -1;

        i++;
    }

    return 0;
}

8. (HF) Adott string-ből töröljük ki az ismétlődő szóközöket!

Pl. "abc  de f     1234"  ->  "abc de f 1234"

Első ötlet: egyesével töröljük a szóközöket:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;

int main()
{
    char s[101];
    cin.getline(s, 101);

    int i = 0;

    while (s[i] != '\0') {
        if (s[i] == ' ' && s[i+1] == ' ') {
            // töröljük s[i]-t
            int j = i;
            while (s[j] != '\0') {
                s[j] = s[j+1];
                j++;
            }
        }
        else
            i++;
    }

    cout << s << endl;
    return 0;
}

Más ötlet: két index segítségével egyetlen bejárással törlünk

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;

int main()
{
    char s[101];
    cin.getline(s, 101);

    int honnan = 0;
    int hova = 0;

    while (s[honnan] != '\0') {
        if (s[honnan] == ' ' && s[honnan+1] == ' ')
            honnan++;
        else {
            s[hova] = s[honnan];
            hova++;
            honnan++;
        }
    }

    s[hova] = '\0';

    cout << s << endl;
    return 0;
}

9. https://www.pbinfo.ro/probleme/2678/formnr
Ki kell számolni egy szövegdarabban előforduló természetes számok összegét.

10. https://www.pbinfo.ro/probleme/97/anagrame
Adott két szó. Határozzuk meg, hogy egymás anagrammái-e!

11. https://www.pbinfo.ro/probleme/1270/b16
Adott egy 16-os számrendszerbeli érték. Írjuk fel 10-es számrendszerben!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
using namespace std;

int hossz(char s[])
{
    int i = 0;

    while (s[i] != '\0')
        i++;

    return i;
}

int main()
{
    char str[11];
    cin >> str;

    // 12A -> 10*pow(16,0) + 2*pow(16,1) + 1*pow(16,2)

    int n = hossz(str);
    int eredmeny = 0;
    int hatvany = 1;

    for (int i = n-1; i >= 0; i--)
    {
        char c = str[i];

        int szj;
        if (c >= '0' && c <= '9')
            szj = c - '0';
        else
            szj = c-'A'+10;

        eredmeny += szj * hatvany;
        hatvany *= 16;
    }

    cout << eredmeny << endl;

    return 0;
}

HF (+pontokért)

1. Adott számot alakítsunk át 10-es számrendszerből egy a felhasználó által megadott p alapú számrendszerbe (p ≤ 30).

2. Milyen (helyiértékes vagy más) számrendszereket használ(t) az emberiség és melyiket mire? (rövid bemutatóanyag készítése és előadása)