Kezdőoldal » Számítástechnika » Programozás » Hogyan lehet azt megoldani...

Hogyan lehet azt megoldani C#ban for ciklus segítségével, hogy a páratlan karaktereket törölje ki a szövegből?

Figyelt kérdés

Elkezdtem gondolkodni, hogy van erre egy szövegkezelőfüggvény a Remove, de utána amikor kiakartam próbálni nem ment, mert annak 2 paramétert kell megadni.


Hogyan lehet ezt megoldani FOR ciklus segítségével?


A válaszokat előre is köszönöm!



2016. szept. 24. 21:25
 1/7 anonim ***** válasza:

Nos, használható a Remove, első paraméter az index, a második, hogy hány karaktert távolítson el, ezt kell egy olyan ciklusba berakni, amit i=0-tól indítasz, és i-t kettesével lépteted.

A gond ezzel, hogy a Remove mindig egy új stringet fog visszaadni, tehát a ciklusod lefutása során (n+1)/2 alkalommal fogsz egy új stringet allokálni, ami.. nem hatékony :D


Nem vagyok benne biztos, hogyan működik a C# esetében a stringek összefűzése, lehet-e úgy hozzáadni egy stringhez, hogy nem hoz létre új példányt, de mindenképpen hatékonyabbnak tartom azt, hogy a ciklusodban egy új stringet hozol létre, ami kezdetben egy üres string, és minden páratlan pozíción levő karaktert hozzáadsz. És a ciklus után ezt az új stringet átadod a kezdeti változódnak. Nekem ez a megközelítés jobban tetszik.

2016. szept. 24. 21:45
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:

És annak miért nem néztél utána, hogy pontosan milyen argumentumot is vár string Remove függvénye..? Az elsőben megadod a kezdő indexet, a másodikban meg hogy hány karaktert akarsz törölni.

myString.Remove(2,1); <- törli a harmadik karaktert.


Nem próbáltam most ki, de gyanítom hogy ha for ciklussal akarsz végigmenni rajta és menet közben törölgetni index alapján akkor érdemes fordítva végigfutni a stringen, hogy ne indexeld túl. Ha azt sem tudod, hogy egyáltalán hogy indulj el akkor ez segít


[link]

2016. szept. 24. 21:46
Hasznos számodra ez a válasz?
 3/7 anonim ***** válasza:
#2 Barnacles, erre nem is gondoltam, ha kitöröl egy karaktert, előretolódik a többi. Ezesetben méginkább javaslom a második megközelítést, amit írtam, egyszerűbb, de ha mindenképp törölgetni akarsz, akkor különösen figyelj oda, hogy ne menj túl a stringen, illetve, hogy az előretolódó karakterek miatt nem kettesével, csak egyesével léptesd a ciklust.
2016. szept. 24. 22:00
Hasznos számodra ez a válasz?
 4/7 anonim ***** válasza:

for (int i = 1; i < str.Length; i++)

{

str = str.Remove(i, 1);

}


Ez minden páratlan indexű karaktert töröl, szóval pl az a1b2c3d4-ből abcd lesz. Számomra nem teljesen egyértlemű a feladat, lehetne úgy is értelmezni, hogy az a1b2c3d4-ből 1234-et akarsz meghagyni. Ekkor csak az i=1-et ird át i=0-ra.


Vagy akár úgy is, hgoy a páratlan számjegyeket akarod kitörölni, tehát ab2cd4 marad.


De amúgy én is azt javaslom, hogy ne törölgess a stringből, hanem hozz létre egy új StringBuildert megfelelő hosszal (n/2+1), és másold át bele azokat a karaktetreket amiket szeretnél meghagyni.

2016. szept. 25. 08:34
Hasznos számodra ez a válasz?
 5/7 anonim ***** válasza:

Nos, kiindulva abból, hogy a C# String-je immutable (azaz nem tudod megváltoztatni)... Van egy System.Text.StringBuilder nevű dolog, ami arra lett kitalálva, hogy hatékonyan tudjunk szöveget gyártani.


string Original = "Ez egy teszt szöveg";

StringBuilder Builder = new StringBuilder();


for (int i = 0; i < Original.Length; i++) {

.. if (i % 2 == 0) Builder.Append(Original[i]); //Ha minden páratlant kitörlünk, akkor minden párosat meghagyunk

}


string Final = Builder.ToString(); //"E g ez zvg"

2016. szept. 25. 18:30
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:

for (int i = 1; i < str.Length; i++)

{

str = str.Remove(i, 1);

}


Itt szerintem kitörli az egészet, tekintve, hogy kettesével kéne lépkedjen de az i++ csak egyet növel. Bár én csak egy laikus vagyok.

2016. szept. 25. 21:04
Hasznos számodra ez a válasz?
 7/7 anonim ***** válasza:
#6 Gondold végig. Kitörli a 0. indexen levő karaktert, így az eredetileg 1-es indexen levő karakter lesz a 0. indexen. Léptet egyet, és az 1-es indexről kitörli azt a karaktert, ami eredetileg a 2. indexen volt. És így tovább. Azért elég egyesével léptetni, mert a törléskor eggyel előrébb csúsznak a karakterek.
2016. szept. 25. 21:12
Hasznos számodra ez a válasz?

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!