- One mobilszolgáltatások
- Samsung Galaxy A54 - türelemjáték
- Xiaomi 14T - nem baj, hogy nem Pro
- India felől közelít egy 7550 mAh-s Redmi
- Samsung Galaxy S23 Ultra - non plus ultra
- Vivo X200 Pro - a kétszázát!
- Xiaomi 14T Pro - teljes a család?
- Okosóra és okoskiegészítő topik
- Motorola Edge 30 Neo - wake up, Jr...
- Hivatalos a OnePlus 13 startdátuma
Új hozzászólás Aktív témák
-
Jester01
veterán
A másoláshoz eleve tudnod kellene hol kezdődik és hol végződik. És ha azt tudod, akkor már nem is kell átmásolni
int next_word(const wchar_t** start, const wchar_t** end)
{
/* az előző szó végétől indulunk */
*start = *end;
/* keressük meg a következő szó elejét */
while(**start != 0 && !iswalnum(**start)) *start += 1;
/* ha a string vége, akkor kész */
if (**start == 0) return 0;
/* keressük meg a szó végét */
*end = *start + 1;
while(iswalnum(**end)) *end += 1;
return 1;
}Az előző példához képest ez most pointeres, de ugyanaz a logika.
-
Jester01
veterán
Ja, ha soronként egy mondat van az jó.
Tulajdonképpen átmásolni felesleges, elég pozíció alapján nézegetni a mondatot. Tehát nyilvántartod a szó elejét és a végét és az alapján ellenőrzöl. Valami ilyesmivel:
int start = 0;
int end;
int found = 0;
while(next_word(&start, &end))
{
if (end - start >= 5 && is_palindrome(start, end))
{
found = 1;
break;
}
}Értelemszerűen a next_word és is_palindrome függvényeket neked kell megírni. Az előbbi sorban visszaadja a szavak kezdő és végpozícióját, az utóbbi pedig megnézi, hogy az adott szó palindróma-e.
-
Jester01
veterán
Azért kínálgatják a wchar.h-t, hogy az ékezetes karaktereket helyesen tudd kezelni. Éppen csak azt felejtették el megmondani, hogy milyen kódolásban van a fájl.
Igen, ha mondatonként olvasol be, az jó megoldás lehet. Figyelned kell arra, hogy esetleg nem fér bele a pufferbe, ezért dinamikusan kell méretezni. Vagy, ha nagyon csúnyán akarod, akkor egyszerre be is olvashatod az egész fájlt
Mindenesetre azt kellene tudni, mi határoz meg egy mondatot - erre jó lenne ha a specifikáció kitért volna. Márcsak azért is, mert bizonyos esetkben igen nehéz eldönteni. Például az Apám neve id. Kiss János. az hány mondat is?
Ennek hiányában egyszerű szabályként például azt lehet használni, hogy a mondat vége ott van ahol egy vagy több ., ! vagy ? áll ami után a következő betű nagy. De ezt mindenképp rögzíteni kell a dokumentációban. Összességében ez egy igen rosszul specifikált probléma, szerintem ne vállald el
A másik kérdésre: valamilyen alkalmas adatszerkezetben nyilván kell tartani a szavakat. Ahogy olvasod a bemenetet, a megfelelő szó előfordulásainak számát növeled. Tipikusan erre a hash tábla a célszerű, de mivel C-ben ilyen nincs, ezért például egy láncolt lista vagy egy bináris fa is megteszi. MOD: persze ilyenek sincsenek, de könnyebb csinálni
-
amargo
addikt
Na de ha megtaláltad, akkor miért nem elég neked csak egy példa a brute force algo
Itt van egy olyan rész, hogy The C code:void BF(char *x, int m, char *y, int n) {
int i, j;
/* Searching */
for (j = 0; j <= n - m; ++j) {
for (i = 0; i < m && x[i] == y[i + j]; ++i);
if (i >= m)
OUTPUT(j);
}
}Ezt most betudom annak, hogy fáradt és megszeppent vagy, én is szoktam ilyen lenni. De legközelebb, ha konkrét linkeket kapsz, nézd is meg.
-
[HUN]Zolee
őstag
Hát fapados megoldásként, feltolod az adott sort egy tömbbe, és elkezded olvasni az elejéről és figyeled hogy mikor jön "B" ha talált, akkor megnézed hogy az utána lévő 2 karakter "U" és "G" ha igen akkor a ciklusváltozódon léptetsz hogy pont kihagyja , ha nem akkor meg nem csinálsz semmit és kiírod .
-
Jester01
veterán
Hát mert nem úgy csináltad, ahogy mondtam
Egy ciklus kell összesen, nem 3. Viszont kell egy változó ami mutatja éppen le vagy fel mész.
Valahogy így:int lepes = 1;
int index = 0;
for(i = 0; i < max - 1; i++)
{
printf("%c", 'a' + index);
index += lepes;
if (index >= visszaford)
{
index = visszaford - 2; /* a minta szerint a felso fordulopontot csak egyszer irjuk ki */
lepes = -1;
}
if (index < 0) {
index = 0; /*a minta szerint az also fordulopontot ketszer irjuk ki */
lepes = 1;
}
} -
blaces
tag
Amúgy ez nem lenne jobb?
while (!(szam && mertekegyseg))
Szerintem erre akart gondolni haver...
Ilyen példát láttam könyvben és én is alkalmaztam egyszerű proginál:
while (a%2 ==0) az ekvivalens ezzel while (!(a%2)) ---> ugyanis !() ilyenkor a ! jel a zárójelben lévő kifejezésnek 0-t ad eredményül ebben a példában. -
Gyuri16
senior tag
na szoval, nezzuk amit te irtal:
while (szam != 0 && mertekegyseg != '0')
eloszoris: while ciklus addig fut, amig a feltetel igaz.
szam != 0 && mertekegyseg != '0'
ez akkor igaz, ha mindket resz igaz, tehat a szam nem 0, es a mertekegyseg se 0. => ha pl a szam == 0 es a mertekegyseg != 0 (az a pelda amit irtal), akkor ott false && true lesz, ami false, tehat a ciklus kilepez -> while (szam != 0 && mertekegyseg != '0') magyarul: addig fusson a ciklus, amig egyik se nulla
amit te akarsz: nem (szam= 0 es mertekegyseg= 0), ami leirva:
!( szam == 0 && mertekegyseg == 0)
ebbol De Morgan azonossagokkal megkapod amit irtam vagyokkal:
szam != 0 || mertekegyseg != 0
ami szavakban: addig csinald a ciklust amig legalabb az egyik nem 0 -
Jester01
veterán
4) például bevezetsz index, max és lépés változókat. Az index mutatja, hol állsz az abcben, a max, hogy meddig, az irány pedig, hogy éppen merre (le/fel=-1/+1). Csinálsz egy külső ciklust, ami a kívánt kiírandó karakterszámig fut. A cikluson belül kiírod az aktuális karaktert, majd a lépés hozzáadásával mész a következőre. Ellenőrzöd nem ütköztél-e az intervallum alsó vagy felső határába és ha igen, akkor a lépést megfordítod és az aktuális indexet korrigálod. A betűk kiírásához felhasználhatod, hogy az ascii kód éppen az angol abc szerint van sorban, vagy alkalmazhatsz egy konstans stringet amiből kinézed a betűket.
5) ezzel nem tudom mi a probléma, elég szájbarágósan le van írva. Csinálsz egy függvényt, ami ellenőrzi, hogy a szám prím-e. Erre az egyszerű favágó megoldás gondolom teljesen jó lesz, miszerint végignézed osztható-e valamivel. A főprogram pedig a feladatkiírásnak megfelelően jár el.
Új hozzászólás Aktív témák
Hirdetés
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- One mobilszolgáltatások
- Samsung Galaxy A54 - türelemjáték
- BestBuy topik
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- gban: Ingyen kellene, de tegnapra
- Milyen TV-t vegyek?
- Vezeték nélküli fülhallgatók
- Nintendo Switch 2
- Digitális Állampolgárság Program DÁP
- TV antenna és jelerősítés
- További aktív témák...
- Beszámítás! Apple iPad 11 2025 128GB WiFi tablet garanciával hibátlan működéssel
- BESZÁMÍTÁS! Microsoft XBOX Series S 512GB játékkonzol garanciával hibátlan működéssel
- BESZÁMÍTÁS! 1TB Western Digital SN850X NVMe SSD meghajtó garanciával hibátlan működéssel
- TELJES KÖRŰ IT BESZERZÉS
- Csere-Beszámítás! Sapphire Pure RX 7900XT 20GB Videokártya! Bemutató darab!
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest