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?
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!
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.
É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
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.
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"
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!