Keresés


Toplista

Toplista
  • betöltés...

Magántanár kereső

Ha szívesen korrepetálnál, hozd létre magántanár profilodat itt.
Ha diák vagy és korrepetálásra van szükséged, akkor regisztrálj be és írd meg itt, hogy milyen tantárgyban!

A programba mit kell csinálni?

379
Az a feladat,hogy kérjen be 1 szöveget és számolja meg,hogy hány különálló betű van benne.
Ezzel csak az a bajom,hogy nem tudom milyen feltételt írjak a megszámlálás tételébe,hogy ha 1 betű pl 2x van akkor azt 1nek számolja :/..

megszámlálás tétele:
db=0;
for(i=0;i<strlen(st);i++)
if(......)
db++;

Az if-be mit kéne írni? :/
Jelenleg 1 felhasználó nézi ezt a kérdést.
0
Középiskola / Informatika

Válaszok

2
Mondjuk vegyél fel egy bool tömböt (256 elemű), kezdetben csupa false, amibe bejegyzed, hogy volt már az a betű.

A kód elején:

bool voltmar[256];
for (int i=0; i<256; i++)
    voltmar[i] = false;

Aztán a for ciklus:

int len = strlen(st);
for (int i=0; i<len; i++) {
    char ch = st[i];
    if (!voltmar[ch])
        db++;
    voltmar[ch] = true;
}

---
Az újabb C szabványokban (C99) van csak bool, korábban csak a C++-ban volt.
bool helyett nyugodtan használhatsz int-et is, akkor false helyett 0 kell, true helyett pedig 1.
Módosítva: 7 éve
0

Csak kiegészítés, most nem nagyon fontos, de ha előrébb jutsz a C-ben, az lesz:
- A gets() veszélyes függvény, nem szabad használni. (Túl tud írni a tömbön.)
- A char adat típus a legtöbb fordítónál előjeles (-128-tól +127-ig), ezért a 256-os tömb, amit javasoltam nem indexelhető vele direktben. Át kell alakítani (cast-olni) az indexet előjel nélkülivé (0-tól 255-ig) mondjuk így: if (!voltmar[(unsigned char)betu]) ...
- A betűk kódolása operációs rendszer függő. Az ékezet nélküli betűkkel nincs gond, azok beférnek egy char-ba (128-nál kisebb a kódjuk mindig), de az ékezeteseket máshogy csinálják. A Windows-on 16 bites wchar_t típus szokott lenni de megkötésekkel a 8 bites előjel nélküli char is elmegy (most nem megyek bele a megkötésekbe). Linuxon meg Mac OS-en változó hosszúságú char szokott lenni, vagyis az ékezet nélküliek 1 byte-osak, az ékezetesek meg 2 vagy 3 (vagy ritkán még több) hosszúak. Olyankor ez a módszer nem jó arra, hogy megállapítsd, volt-e már olyan betű, sőt, már az strlen se a betűk számát adja vissza.

Szóval most csak ékezet nélküli betűkkel próbáld ki a programodat.
1