A működési elvet és a határokat valaki nekem letisztázná?
Adott nekem egy algoritmus ami egy karakterláncban n-1 indextől m darab karaktert töröl.Na már most nem értem igazán az algoritmus működési elvét, leginkább azt, hogy mi mettől törlődik milyen határokig.
Képet csatololok, a lap tetején lévő forráskódról lenne szó.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
Adott 2 tömb.
szöveg meg sb.
Mivel az sb[50] = "" szerepel, így a sb[0] = '\0';-val egyenértékű, mivel sztringet/karaktereket nem tartalmaz.
Meg kell említenem, hogy a tömb neve, jelen esetben pointer. Azaz a [0] indexre mutat! Tehát:
szoveg[10] = 'c' vagy *(szoveg+10) = 'c' ugyanaz!!!
DE! Meg kell különböztetni a szoveg+n-1 és a szoveg[n-1] -eket.
-- Elöbbi: pointer értéket változtatsz, és *char-t kapsz.
pl.:
szoveg[256] = "abcd";
printf("%s", szoveg); // output: abcd (szoveg pointer a-ra mutat)
printf("%s", szoveg+1) // output: bcd (nincs a, mert szoveg pointer b-re mutat)
Mint tudjuk a '\0'-ig tart a sztring, tehát addig megy a kiíratás vagy bármi más. :)
-- Utóbbi: egy tömbelemre hivatkozol közvetlenül és char-t kapsz vissza.
Akkor térjünk át az if-ekre:
legyen a szoveg tartalma: "abcdefgh"
szoveg[0] // ez az 'a' ezt tudjuk
@Eset 1
strlen(szoveg) // 8 hosszú
legyen N = 3
legyen M = 6
3 <= 8 IGEN
6 >= (8 - 6 + 1) IGEN
Akkor: strcat(sb, szoveg+3-1) //strncat(<hova>, <mettől>)
// sb tömbbe a szoveg+3-1 azaz szoveg+2 (pointert 2-el odébb tolva, ami 'c'-n fog állni) a '\0' bezáróig átmásoljuk az sb-be
sb tartalma "cdefgh"
@Eset 2
legyen N = 2
legyen M = 3
2 <= 8 IGEN
3 >= (8 - 2 + 1) HAMIS
Akkor: strncat(sb, szoveg+2-1, 2) //strncat(<hova>, <mettől>, <mennyit>)
Azaz sb-be átmásoljuk az adott pointertől x karaktert. Azaz szoveg+1-től (azaz 'b'-től) 3db karaktert.
sb tartalma "bcd"
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
javítás 2. esethez: strncat(sb, szoveg+2-1, 3)
strncat(..., 2) -> strncat(..., 3)
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!