Kezdőoldal » Számítástechnika » Programozás » A működési elvet és a határoka...

A működési elvet és a határokat valaki nekem letisztázná?

Figyelt kérdés

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ó.

[link]


2017. márc. 28. 14:23
 1/5 anonim ***** válasza:
Én nem tudom elolvasni, úgy összefolyik minden de nem tudom mit nem lehet megérteni azon, hogy a string karakterein végigmész és ahol a pattern kezdődik-végződik, ott végzel műveletet..
2017. márc. 28. 15:14
Hasznos számodra ez a válasz?
 2/5 A kérdező kommentje:
Valaki segítőkészebb?
2017. márc. 28. 18:52
 3/5 anonim ***** válasza:

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"



[link]

[link]

2017. márc. 29. 12:55
Hasznos számodra ez a válasz?
 4/5 anonim ***** válasza:

javítás 2. esethez: strncat(sb, szoveg+2-1, 3)


strncat(..., 2) -> strncat(..., 3)

2017. márc. 29. 12:58
Hasznos számodra ez a válasz?
 5/5 A kérdező kommentje:
Köszönöm szépen!
2017. márc. 29. 16:04

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!