Feladatok
1. (HF) 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 >= 'a' && c <= 'z')
cout << "kisbetu" << endl;
else if (c >= 'A' && c <= 'Z')
cout << "nagybetu" << endl;
else if (c >= '0' && c <= '9')
cout << "szamjegy" << endl;
else
cout << "mas" << endl;
return 0;
}
|
2. (HF) 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
27
| #include <iostream>
using namespace std;
int main()
{
char c;
cin >> c;
if ((c >= 'a' && c <= 'z')
|| (c >= 'A' && c <= 'Z') )
{
if (c == 'a' || c == 'A'
|| c == 'e' || c == 'E'
|| c == 'i' || c == 'I'
|| c == 'o' || c == 'O'
|| c == 'u' || c == 'U')
{
cout << "maganhangzo" << endl;
}
else
cout << "massalhangzo" << endl;
}
else
cout << "nem betu" << endl;
return 0;
}
|
3. (HF) 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
| #include <iostream>
using namespace std;
int main()
{
char c;
cin >> c;
if (c >= 'a' && c <= 'z') {
c = 'A' + (c - 'a');
}
cout << c << endl;
return 0;
}
|
4. Í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
10
11
12
13
14
15
16
17
18
19
20
21
22
| #include <iostream>
using namespace std;
int hossz(char s[])
{
int i = 0;
while (s[i] != '\0')
i++;
return i;
}
int main()
{
char str[100] = "hello, world!";
cout << hossz(str) << endl; // 13
return 0;
}
|
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
| #include <iostream>
using namespace std;
void masol(char hova[], char honnan[])
{ int i;
for(i=0;honnan[i]!='\0';i++){
hova[i]=honnan[i];
}
hova[i]='\0';
}
int main()
{
char str1[100], str2[100];
cin.getline(str1, 100);
masol(str2, str1);
cout << str2 << 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
| void ragaszt(char hova[], char honnan[])
{
int i_hova = 0;
while (hova[i_hova] != '\0')
i_hova++;
int i_honnan = 0;
while (honnan[i_honnan] != '\0') {
hova[i_hova] = honnan[i_honnan];
i_hova++;
i_honnan++;
}
hova[i_hova] = '\0';
}
|
7. Írjunk programot, amely két karaktersort
összehasonlít (szótári sorrend szerint).
Az eredmény legyen:
- 0, ha egyenlőek
- -1, ha az első kisebb, mint a második (kisebb == hamarabb van a szótárban)
- +1, ha az első nagyobb, mint a második (nagyobb == később van a szótárban)
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
22
23
24
25
26
27
28
29
30
31
| #include <iostream>
using namespace std;
int hasonlit(char s1[], char s2[])
{
int i = 0;
while (s1[i] != '\0' || s2[i] != '\0') {
if (s1[i] > s2[i])
return 1;
else if (s1[i] < s2[i])
return -1;
i++;
}
return 0;
}
int main()
{
char str1[100];
char str2[100];
cin.getline(str1, 100);
cin.getline(str2, 100);
cout << hasonlit(str1, str2) << endl;
return 0;
}
|
8. 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: töröljünk minden olyan szóközt, ami előtt szintén szóköz van.
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[100];
cin.getline(s,100);
int i = 1; // a másodiktól
while (s[i] != '\0') {
if (s[i] == ' ' && s[i-1] == ' ')
{
// s[i]-t töröljük
for (int j = i; s[j]!='\0'; j++)
s[j] = s[j+1];
}
else {
i++;
}
}
cout << s << endl;
return 0;
}
|
Másképp: két indexet használunk és egyből a helyükre rakjuk a karaktereket.
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
| #include <iostream>
using namespace std;
int main()
{
char s[100];
cin.getline(s,100);
int i_olvas = 0;
int i_ir = 0;
while (s[i_olvas] != '\0') {
if (s[i_olvas] != ' '
|| (i_olvas == 0 || s[i_olvas-1] != ' '))
{
s[i_ir] = s[i_olvas];
i_ir++;
i_olvas++;
}
else {
i_olvas++;
}
}
s[i_ir] = '\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.
Megoldás (Ágnes):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| #include <iostream>
using namespace std;
int main()
{
char t[256];
cin.getline(t, 256);
int i=0;
int s=0;
int szam=0;
while(t[i]!=0){
if(t[i]>='0' && t[i]<='9')
szam=szam*10+(t[i]-'0');
else{
s+=szam;
szam=0;
}
i++;
}
s+=szam;
cout<<s<<endl;
return 0;
}
|
10. https://www.pbinfo.ro/probleme/97/anagrame
Adott két szó. Határozzuk meg, hogy egymás anagrammái-e!
Ötlet: egy-egy frekvenciatömbben követjük, hogy melyik betűből hány van a stringekben.
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
| #include <iostream>
using namespace std;
int main()
{
char s1[21], s2[21];
cin >> s1 >> s2;
int f1[256] = {};
int f2[256] = {};
for (int i = 0; s1[i] != '\0'; i++)
f1[s1[i]]++;
for (int i = 0; s2[i] != '\0'; i++)
f2[s2[i]]++;
bool jo = true;
for (int i = 0; i < 256; i++)
if (f1[i] != f2[i])
jo = false;
if (jo)
cout << 1 << endl;
else
cout << 0 << endl;
return 0;
}
|
Más ötlet: ha rendezzük a karaktertömböket, akkor már csak összehasonlítani kell.
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
| #include <iostream>
using namespace std;
int hossz(char s[])
{
int i = 0;
while (s[i] != '\0')
i++;
return i;
}
void rendez(char s[])
{
int n = hossz(s);
for (int i = 0; i < n; i++)
for (int j = i+1; j < n; j++)
if (s[i] > s[j])
{
char temp = s[i];
s[i] = s[j];
s[j] = temp;
}
}
int hasonlit(char s1[], char s2[])
{
int i = 0;
while (s1[i] != '\0' || s2[i] != '\0') {
if (s1[i] > s2[i])
return 1;
else if (s1[i] < s2[i])
return -1;
i++;
}
return 0;
}
int main()
{
char s1[21], s2[21];
cin >> s1 >> s2;
rendez(s1);
rendez(s2);
if (hasonlit(s1, s2) == 0)
cout << 1 << endl;
else
cout << 0 << endl;
return 0;
}
|
11. https://www.pbinfo.ro/probleme/1270/b16
Adott egy 16-os számrendszerbeli érték. Írjuk fel 10-es számrendszerben!
Megoldás (Jázmin):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| #include <iostream>
using namespace std;
int main() {
int tizes = 0;
char szo[100];
cin >> szo;
for (int i = 0; szo[i] != '\0'; i++) {
char hex = szo[i];
int szam;
if (hex >= '0' && hex <= '9') {
szam=hex-'0';
} else if (hex >= 'A' && hex <= 'F') {
szam=10+(hex - 'A');
}
tizes=tizes*16+szam;
}
cout<<tizes<<endl;
return 0;
}
|