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?
hívŐ
kérdése
408
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 :/..
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
hívŐ:
Nemrég kezdtem a C-t ,szóval sajnos nem tudom mit értesz "bool" tömb alatt és aztsem ,hogy false tipúsut ,kifejtenéd?:/
7 éve0
hívŐ:
Ha ezt bemásolom ,ugyan kész lesz a program de én nem fogom megérteni mivel sok olyan dolog írtál amit én jelenleg még nem tanultam :/ ,lehetőleg megírnád nekem úgy,hogy nem haasználhatsz bool tömböt ,hanem csak sime vagy 2 dimenziósat és ezeket a "ch"kat illetve a "lent"-t se ?
7 éve0
hívŐ:
és a ch illetve a lent-t helyett mit használhatok ? :/
7 éve0
bongolo:
ch és len azok csak sima változók, én neveztem őket olyannak, nevezheted bárminek. Mondjuk ch hel;yett betu, len helyett pedig hossz.
7 éve0
bongolo:
Az int érthető?
7 éve0
hívŐ:
jaaah értem .. ,akkor szerintem mostmár menni fog,köszi a segítséget
7 éve0
hívŐ:
persze ezek tudom
7 éve0
hívŐ:
ezeket*
7 éve0
bongolo:
OK, ha gond van, szólj nyugodtan.
7 éve0
hívŐ:
rendben
7 éve0
bongolo:
Azért vittem ki az strlen(st) hívást a for ciklus alé (a len nevű változóba), mert ahogy írtad, úgy minden újabb iterációnál lefutott az a függvény. Ettől jó lassú a ciklus. Persze ez ennél a programnál nem számít, de majd ha igazit írsz, akkor már igen.
7 éve1
hívŐ:
Ez az egész program,valahogy megpróbáltam beépíteni amit írtál az én programomba ,azonban nem működik :/ elárulnád hol a hiba?
7 éve0
hívŐ:
#include #include #include #define N 31 int main() { char st[N],st1[N]; int i,voltmar[256]; printf("kerem a szoveget: "); gets(st); for(i=0;i
7 éve0
bongolo{ }
válasza
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.