Entwickler-Ecke

C# - Die Sprache - Buchstaben löschen von Text


ridderle - Do 08.05.08 14:45
Titel: Buchstaben löschen von Text
Guten tag,
ich brauche eine Idee, wie ich von einem Text, den ich einlese, einzelne Buchstaben löschen kann, die ich vorher bestimmen kann.

Also zB..

eingelesener_Text: Hello World
löschen_Buchstaben: l

-> dann kommt raus: Heo Word

Gibt es da einen speziellen Befehl?
Oder kann man das auch durch eine Schleife lösen?
Ein String ist ja eig ein Array, ein Array aus verschiedenen Chars, oder?

Wäre nett, wenn mir jmd helfen könnte.
MfG


arj - Do 08.05.08 14:50

Tipp:

C#-Quelltext
1:
string.Replace                    


> Oder kann man das auch durch eine Schleife lösen?
Ja könnte man auch. Aber mit dem Befehl oben gehts wahrscheinlich schöner.

> Ein String ist ja eig ein Array, ein Array aus verschiedenen Chars, oder?
Das war früher einmal so. Mittlerweile stimmt das im Prinzip auch noch,
in C# ist es allerdings so, dass ein String und ein Char-Array verschiedene Objekte sind.
Es gibt aber immer noch ein String.ToCharArray.


JüTho - Do 08.05.08 15:09

Ergänzend zu Roberts Erläuterungen gilt außerdem: Ein Array hat (grundsätzlich) eine unveränderliche Größe! Etwas wie CharArray.Remove(7) zum Löschen des Zeichens an Position 7 gibt es nicht. Wenn man so etwas braucht, muss man über Alternativen nachdenken. Für Änderungen eines Strings gibt es den StringBuilder, als Ersatz für Arrays ist List<> fast immer besser.

Jürgen


ridderle - Do 08.05.08 18:54

user profile iconarj hat folgendes geschrieben:
Tipp:

C#-Quelltext
1:
string.Replace                    


> Oder kann man das auch durch eine Schleife lösen?
Ja könnte man auch. Aber mit dem Befehl oben gehts wahrscheinlich schöner.


wie könnte man es dann mit einer schleife lösen?


JüTho - Do 08.05.08 19:18

user profile iconridderle hat folgendes geschrieben:
wie könnte man es dann mit einer schleife lösen?

Variante 1 ist nicht gut, weil Strings grundsätzlich unveränderlich sind; dabei muss also ständig im Arbeitsspeicher umkopiert und ein neuer String angelegt werden:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
string source = "Hello World";
int length = source.Length;
string result = String.Empty;
for(int x1 = 0; x1 < length; x1++) {
    if (source[x1] != 'l')
        result += source[x1];
}

Variante 2 mit StringBuilder ist deshalb besser:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
using System.Text;
string source = "Hello World";
int length = source.Length;
StringBuilder sb = new StringBuilder(length);
for(int x1 = 0; x1 < length; x1++) {
    if (source[x1] != 'l')
        sb.Append(source[x1]);
}
string result = sb.ToString();

Jürgen


ridderle - So 11.05.08 16:57

also irgendwie geht das programm nicht bei mir....

sicher, dass der quellcode stimmt?


JüTho - So 11.05.08 18:23

user profile iconridderle hat folgendes geschrieben:
also irgendwie geht das programm nicht bei mir....

Und was geht nicht? Welche Fehler meldet der Compiler, welche Fehler gibt es zur Laufzeit?

user profile iconridderle hat folgendes geschrieben:
sicher, dass der quellcode stimmt?

Nein, ganz und gar nicht. Ich habe es einfach so aufgeschrieben. Du willst etwas lernen, sollst also die Vorschläge selbst umsetzen, dabei verstehen, was gemacht wird, und Problemstellen selbst untersuchen.

Hilfe bekommst Du von der SDK-Doku, vom Compiler oder aus der Literatur, z.B. OpenBook C# [http://www.galileocomputing.de/openbook/csharp].

Jürgen


ridderle - Mi 14.05.08 10:45

Also hier ist mal mein Quelltext:
habe es in einer Funktion gemacht:
aber das Problem funktioniert noch nicht wirklich :-/

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
using System;
using System.Collections.Generic;
using System.Text;

namespace Hausaufgaben_2
{
    class Program
    {

        public static string BuchstabenLöschen(string s1, string rausDamit)
        {

            s1 = Console.ReadLine();
            int length = s1.Length;
            rausDamit = String.Empty;
            for (int no = 0; no < length; no++)
            {
                if (s1[no] != 'l')
                    rausDamit += s1[no];
            }

            return s1;
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Buchstaben löschen");
            Console.WriteLine("Geben Sie einen Satz ein");
            string s1 = Console.ReadLine();

            Console.WriteLine("Welche Wörter möchten Sie löschen?");
            string s2 = Console.ReadLine();

            BuchstabenLöschen(s1, s2);

            Console.ReadKey();
        }
    }
}


arj - Mi 14.05.08 11:38

Also zum einen hast du oben von Buchstaben löschen gesprochen.
Im aktuellen Quelltext willst du jetzt aber Wörter löschen! (das ist doch bisschen was anderes).

Wieso nimmst du nicht einfach das String.Replace das ich genannt habe, damit würde sogar beides funktionieren.

Der Grund warum bei dir der Quelltext nicht funktioniert ist der folgende:
Du testest in Zeile 18 immer auf 'l', es werden also nur ls rausgeschmissen und
nicht das was du der Funtion als Parameter übergibst.

Zum anderen übergibst du der Funktion den Parameter s1, in der Text steht aus dem gelöscht werden soll.
Jetzt machst du aber nochmals ein ReadLine von der Konsole und ließt erneut ein?!?

Außerdem belegst du mehrere Variablen mit unterschiedlichen Funktionen (rausdamit, s1).

Versuchs dochmal so (ungetestet!):


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
using System;
using System.Collections.Generic;
using System.Text;

namespace Hausaufgaben_2
{
    class Program
    {

        public static string BuchstabenLöschen(string s1, char rausDamit)
        {
            int length = s1.Length;
            string result = String.Empty;
            for (int no = 0; no < length; no++)
            {
                if (s1[no] != rausDamit)
                    result += s1[no];
            }

            return result;
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Buchstaben löschen");
            Console.WriteLine("Geben Sie einen Satz ein");
            string s1 = Console.ReadLine();

            Console.WriteLine("Welchen Buchstaben möchten Sie löschen?");
            string s2 = Console.ReadLine();

            Console.WriteLine(BuchstabenLöschen(s1, s2));

            Console.ReadKey();
        }
    }
}


viel kürzer und einfacher wäre jedoch:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
using System;
using System.Collections.Generic;
using System.Text;

namespace Hausaufgaben_2
{
    class Program
    {

        static void Main(string[] args)
        {
            Console.WriteLine("Buchstaben löschen");
            Console.WriteLine("Geben Sie einen Satz ein");
            string s1 = Console.ReadLine();

            Console.WriteLine("Welchen Buchstaben möchten Sie löschen?");
            string s2 = Console.ReadLine();

            Console.WriteLine(s1.Replace(s2));

            Console.ReadKey();
        }
    }
}


ridderle - Mi 14.05.08 11:44

ne, ich möchte buchstaben aus wörter löschen :)


ridderle - Mi 14.05.08 12:37

ne, ich möchte buchstaben aus wörter löschen :)


C#-Quelltext
1:
if (s1[no] != rausDamit)                    


das geht doch nicht, oder ? also der operator bei strings und chars ?


JüTho - Mi 14.05.08 13:40

Du solltest Dir klar werden, was Du willst, und das dann umsetzen.

Wenn Du schreibst "ich möchte buchstaben aus wörter löschen", dann passt die Methode BuchstabenLöschen nicht, wenn sie als rausDamit einen String erwartet. Buchstabe entspricht Char! Bei C# musst Du genau auf die Typen achten; deshalb klappt der Vergleich natürlich nicht. Andererseits gibt es auch String.IndexOf() und Alternativen zum Vergleich von Strings.

Wie wäre es mit Console.ReadKey() statt Console.ReadLine() für die Abfrage eines Zeichens?

In Deinem Code sind mehrere Fallen enthalten, wodurch ich Zweifel bekomme, ob Du wirklich das meinst, was Du versuchst. Beispiel:

C#-Quelltext
1:
rausDamit += s1[no];                    

Der String rausDamit hat in der Methode einen Startwert, bekommt hier zusätzliche Zeichen angehängt und wird am Ende der Methode ganz vergessen.

Auf weitere Schwachpunkte Deines Vorgehens hat arj hingewiesen.

Du solltest Dein Gesamtkonzept nochmals genau prüfen. Anders als arj beharre ich nicht auf String.Replace(), auch wenn das deutlich einfacher wäre, und lehne die Lösung mit Schleife nicht ab, weil sie zum mehrfachen Verständnis nützlich ist und auch für andere Verfahren geeignet sein kann. Wenn ich aber feststelle, dass Du nicht wirklich mitdenkst, werde ich auch darauf verzichten.

Gruß Jürgen


arj - Mi 14.05.08 13:52

s[5] ist ein Char! (siehe auch MSDN, oder IntelliSense)

Es muss allerdings im Quelltext folgendermaßen heißen:

C#-Quelltext
1:
Console.WriteLine(BuchstabenLöschen(s1, s2[0]));                    

anstatt

C#-Quelltext
1:
Console.WriteLine(BuchstabenLöschen(s1, s2));                    


@JüTho:
Ich beharre nicht auf String.Replace. Prinzipiell find ich auch gut wenn man das selbst mit Schleifen implementiert
um zu verstehen wie sowas abläuft.
Andererseits ist es auch wichtig, dass Rad nicht neu zu erfinden.
Wenn wir alle in größeren Projekten anstatt Funktionalitäten aus der Standardbibliothek zu nutzen alles
selbst implementieren würden, würde das zu extrem komplexen und schwer verständlichen Projekten führen.
KISS [http://de.wikipedia.org/wiki/KISS-Prinzip]
(Aber dass muss ich dir wahscheinlich nicht sagen ;) )


ridderle - Mi 14.05.08 14:55

naja also das Problem ist allerdings, dass ich bei dieser Aufgabe den Methodenkopf vorgegeben habe,

und der ist eben

public static string BuchstabenLöschen(string text, string BuchstabenLöschen)


Dass ich einen char nehmen kann, ich mir natürlich auch klar, aber ein String geht ja auch...
Ich möchte ja nicht nur einen einzelnen Buchstaben rauswerfen, sondern es können ja auch mehrere sein.

Wie gesagt ich möchte es lieber über eine Schleife lösen, um es wie mein Vorredner gesagt hat zu verstehen.
Aber wie das nun genau geht, steht mir noch in den Sternen....

Ich muss ja praktisch eine Schleife machen, die eine Abfrage hat, ob der zu löschende Buchstabe in meinem vorher eingegebenen Wort / Satz ist, wenn ja, dann wird er gelöscht.

Mir fehlen leider nur die Kenntnisse wie ich Buchstabe für Buchstabe abfrage....


qwertzqwertyqwertzqwerty - Mi 14.05.08 21:09

user profile iconridderle hat folgendes geschrieben:
Mir fehlen leider nur die Kenntnisse wie ich Buchstabe für Buchstabe abfrage....


Wenn ich dich richtig verstanden habe dürfte das so gehen:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
string[] abc = { rausDamit };
string[] def = s1.Split(abc, StringSplitOptions.RemoveEmptyEntries);
string endergebnis = "";
int i = 0;
for (int z = 0; z < 1; )
{
    try
    {
        endergebnis += def[i];
        i = i + 1;
    }
    catch (IndexOutOfRangeException)
    {
        z = 2;
    }
}
Console.Writeline(endergebnis);


ridderle - Mi 14.05.08 21:48

naja mag ja schön und gut sein....
Aber wir haben bisher noch nie solche Sachen durchgenommen:
StringSplitOptions.RemoveEmptyEntries)

und so...
Das ganze sollte durch eine Schleife doch auch machbar sein, ohne solche vorinstallierte Funktionen zu verwenden?!


ridderle - Mi 21.05.08 14:31

user profile iconridderle hat folgendes geschrieben:
naja also das Problem ist allerdings, dass ich bei dieser Aufgabe den Methodenkopf vorgegeben habe,

und der ist eben

public static string BuchstabenLöschen(string text, string BuchstabenLöschen)


Dass ich einen char nehmen kann, ich mir natürlich auch klar, aber ein String geht ja auch...
Ich möchte ja nicht nur einen einzelnen Buchstaben rauswerfen, sondern es können ja auch mehrere sein.

Wie gesagt ich möchte es lieber über eine Schleife lösen, um es wie mein Vorredner gesagt hat zu verstehen.
Aber wie das nun genau geht, steht mir noch in den Sternen....

Ich muss ja praktisch eine Schleife machen, die eine Abfrage hat, ob der zu löschende Buchstabe in meinem vorher eingegebenen Wort / Satz ist, wenn ja, dann wird er gelöscht.

Mir fehlen leider nur die Kenntnisse wie ich Buchstabe für Buchstabe abfrage....


Christian S. - Mi 21.05.08 14:34

Welche eigenen Ansätze hast Du denn bisher verfolgt? Bzw. wie weit bist Du? Du wirst in der einen Woche ja sicherlich auch selber noch an dem Problem gearbeitet haben, denn einige Ansätze die Du selber weiterverfolgen kannst, wurden Dir ja hier im Thread gegeben.


ridderle - Do 22.05.08 17:50


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
string[] abc = { rausDamit };
string[] def = s1.Split(abc, StringSplitOptions.RemoveEmptyEntries);
string endergebnis = "";
int i = 0;
for (int z = 0; z < 1; )
{
    try
    {
        endergebnis += def[i];
        i = i + 1;
    }
    catch (IndexOutOfRangeException)
    {
        z = 2;
    }
}
Console.Writeline(endergebnis);



Bei dem hier geht es nun zwar.... aber er löscht dann komplett alle Buchstaben, die nach dem Buchstaben, der raus gelöscht werden soll, das sollte natürlich auch nicht sein, also es soll nur der Buchstabe gelöscht werden, der auch eingetippt wird, nicht der rest dahinter auch...
Wie ist das lösbar ?


Christian S. - Do 22.05.08 18:41

Guck Dir nochmal ganz scharf Deine Schleife an und überlege, welche Variable als Zählvariable Sinn macht ;-)


ridderle - Do 22.05.08 18:58

macht i Sinn?


Christian S. - Do 22.05.08 19:11

Überlege Dir, wie der Algorithmus arbeitet, dann kannst Du Dir das selber beantworten. Du musst schonmal ein wenig selber drüber nachdenken ...


ridderle - Do 22.05.08 19:13

also irgendwie komme ich nicht dadrauf


Christian S. - Do 22.05.08 19:27

Beschreib doch mal mit Worten, was Deine Schleife macht. Das mag komisch klingen, aber es hilft wirklich oft, sich etwas klar zu machen, wenn man es in "menschliche" Sprache übersetzt.


ridderle - Do 22.05.08 19:31

es geht das array durch und setzt wenn der zu löschende bzw die zu löschende Buchstaben enthält das Endergebnis rein, das mit leerzeichen gefüllt ist.


Christian S. - Do 22.05.08 19:36

Nein. Okay, fangen wir vorher an. Was macht Split?


ridderle - Do 22.05.08 19:38

gute Frage...
Ich nehme aber mal an, dass es den String in einzelne chars splittet?


Christian S. - Do 22.05.08 19:45

Fast ;-)

Wen Du Dir die Splitfunktion in der Doku ansiehst, wirst Du sehen, dass es Dir einen String in ein Array von Strings aufteilt. Dabei übergibst Du das "Trennzeichen" als ersten Parameter. Wenn Du also "Eins,Zwei,Drei,Vier".Split({","}) machst, bekommst Du ein Array mit den Worten "Eins" bis "Vier". Das "," ist nicht mehr dabei.

Wird Dir die Schleife jetzt klarer? :-)


ridderle - Do 22.05.08 19:49

nein, noch nicht so ganz...
Aber ich möchte doch die einzelnen Buchstaben splitten?


Christian S. - Do 22.05.08 20:00

Nimm mal den String:

"H,allo r,idderle"

und Du willst die "," rauswerfen. Und jetzt schau Dir mal an, was Split({","}) mit dem String macht. Dann sieht man direkt, wie das ganze gehen soll!


ridderle - Do 22.05.08 20:10

es löscht die "," ?


Christian S. - Do 22.05.08 20:11

Ja, schon fast richtig. Split liefert ein Array zurück mit dem Text, der kein "," enthält.

Was macht die Schleife also anschließend? :-)


ridderle - Do 22.05.08 20:14

löscht die Buchstaben, die gelöscht werden sollen?


Christian S. - Do 22.05.08 20:23

Du hast eben folgendes festgestellt:
user profile iconridderle hat folgendes geschrieben:
es löscht die "," ?


Und jetzt schreibst Du, die Schleife
user profile iconridderle hat folgendes geschrieben:
löscht die Buchstaben, die gelöscht werden sollen?


Sorry, aber wenn Du nicht mal anfängst, Dir ein bisschen Mühe zu geben, verlier ich die Lust ...


ridderle - Do 22.05.08 20:25

wenn dies schon die "," löscht, dann wird die Schleife jeden einzelnen Buchstaben durchgehen, oder ?
Also es können ja auch mehrere Buchstaben gelöscht werden.
Stimmt das?


Christian S. - Do 22.05.08 20:27

*seufz*
Gehen wir mal anders rum vor: Wenn Du das Ergebnis von Split hast, was musst Du dann noch machen, um das rauszubekommen, was Du haben willst?

Und jetzt denkst Du bitte mal länger als eine Minute nach! So langsam komme ich mir ver*rscht vor!


ridderle - Do 22.05.08 20:44

die Stellen finden, wo ich dann ein Leerzeichen machen darf / kann?


Kha - Do 22.05.08 22:14

Kurze Zwischenfrage (Christian, deine Beharrlichkeit ist beneidenswert ;) ):
user profile iconridderle hat folgendes geschrieben:
naja also das Problem ist allerdings, dass ich bei dieser Aufgabe den Methodenkopf vorgegeben habe,

und der ist eben

public static string BuchstabenLöschen(string text, string BuchstabenLöschen)


Dass ich einen char nehmen kann, ich mir natürlich auch klar, aber ein String geht ja auch...
Ich möchte ja nicht nur einen einzelnen Buchstaben rauswerfen, sondern es können ja auch mehrere sein.
Zumindest für mich ist immer noch nicht klar, was du vorhast. Angenommen, BuchstabenLöschen="ab". Sollen nun alle Vorkommen von "ab" gelöscht werden oder alle Vorkommen von "a" und alle von "b"?


ridderle - Do 22.05.08 22:16

alle mit "a" und "b"....


Kha - Do 22.05.08 22:24

So habe ich es mir auch gedacht, dann hat dich qwertzqwertyqwertzqwerty aber auf einen bösen Holzweg geschickt ;) .
Du hattest hier [http://www.c-sharp-forum.de/viewtopic.php?p=501922#501922] doch schon eine funktionierende Methode, um einen Buchstaben zu löschen. Jetzt musst du aus der vorgegebenen Methode doch nur noch für jeden Buchstaben aus "BuchstabenLöschen" diese Methode aufrufen, fertig. Wenn du das hast, kannst du dir ja noch überlegen, wie man das in eine einzige Methode packen kann.


ridderle - Do 22.05.08 22:32

ja, das ist eben mein Problem, woran ich scheitere...

Bisher kann ich ja einen bzw. mehrere Buchstaben löschen, aber sobald ein Buchstabe gelöscht wird, schneidet der Compiler den Rest auch ab...


Kha - Do 22.05.08 22:54

user profile iconridderle hat folgendes geschrieben:
ja, das ist eben mein Problem, woran ich scheitere...
Dann zeig doch mal, wie weit du bist oder sag einfach genauer, wo es hakt :nixweiss: . Wie gesagt, nimm deinen funktionierenden Code aus dem verlinkten Posting und bau darum einfach eine Schleife, die ihn nacheinander für jeden zu löschenden Buchstaben aufruft.
Ich habe mir jetzt erst qwertz's Code genauer angesehen und kann dir eigentlich nur raten: Vergiss ihn schnell wieder. Schon allein, weil dein Lehrer mit einem Split nicht zufrieden sein wird, wie du schon selbst gesagt hast.


ridderle - Fr 23.05.08 12:26


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
using System;
using System.Collections.Generic;
using System.Text;

namespace Hausaufgaben_2
{
    class Program
    {

        public static string BuchstabenLöschen(string satz, string löschen)
        {
            string weg = " ";
            for (int no = 0; no < s1.length; no++)
            {
                if (satz[no] != löschen)
                {
                    satz[no] = satz[no] + weg;
                }
            }

            return satz;
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Buchstaben löschen");
            Console.WriteLine("Geben Sie einen Satz ein");
            string satz = Console.ReadLine();

            Console.WriteLine("Welchen Buchstaben möchten Sie löschen?");
            string löschen = Console.ReadLine();

            Console.WriteLine(BuchstabenLöschen(satz, löschen));

            Console.ReadKey();
        }
    }
}


So habe nun nochmal das ganze versucht zu überarbeiten...
Man sagt ja, wenn man es auf Deutsch sagen kann, könnte man es auch programmieren:

Wenn der String "satz" buchstaben von "löschen" enthält, dann setze an den String "satz" an der Stelle, wo sich der Buchstabe von "löschen" befindet die variable string weg ein, die Leerzeichen beinhaltet.

Jetzt weiß ich aber nicht, wie ich den String text, in einzelne Buchstaben zerlegen kann, dass es mir jeden Buchstaben durchgeht und vergleicht, ob es die Buchstaben enthält, die auch "löschen" enthält.


Kha - Fr 23.05.08 15:18

user profile iconridderle hat folgendes geschrieben:
Jetzt weiß ich aber nicht, wie ich den String text, in einzelne Buchstaben zerlegen kann, dass es mir jeden Buchstaben durchgeht und vergleicht, ob es die Buchstaben enthält, die auch "löschen" enthält.
Wie man einen String durchgeht, hast du doch schon an "satz" gezeigt? Du musst jetzt nur noch die zwei Schleifen beliebig schachteln:
Entweder führst du für jedes Zeichen in "löschen" deine alte Methode, die ein einziges Zeichen löscht, aus,
oder du schaust innerhalb deiner bisherigen Schleife, ob "satz[no]" mit irgendeinem Char aus "löschen" übereinstimmt.

PS: Über die Stelle
Zitat:
[...], dann setze an den String "satz" an der Stelle, wo sich der Buchstabe von "löschen" befindet die variable string weg ein
solltest du dir auch noch Gedanken machen, denn in deinem Code ist keine Ersetzung zu erkennen.


ridderle - Fr 23.05.08 15:42

ich kann doch keinen string mit char vergleichen?!
jedenfalls bekomme ich da immer einen Fehler


Kha - Fr 23.05.08 17:27

user profile iconridderle hat folgendes geschrieben:
ich kann doch keinen string mit char vergleichen?!
Natürlich nicht. Hat auch niemand behauptet :P .

Und jetzt gebe ich dir erst einmal 24h zum Nachdenken :P ² .


ridderle - Sa 24.05.08 13:53

ja ein String ist ja quasi ein Array von Chars?
Das heisst, dass ich den String bzw eigentlich beide Strings als Char Array umwandeln muss?

Anders würde es für mich nun kein Sinn machen.
Aber wie das umwandeln geht, steht mir auch in den Sternen


JüTho - Sa 24.05.08 15:03

user profile iconridderle hat folgendes geschrieben:
ja ein String ist ja quasi ein Array von Chars?
Das heisst, dass ich den String bzw eigentlich beide Strings als Char Array umwandeln muss?

Verd... nochmal, bist Du so blöd, oder tust Du nur so? Ein String ist nicht "quasi" ein Array von Chars, sondern das ist er wirklich!* Jedes einzelne Element ist ein Char, und ein solch einzelnes Element kannst Du doch mit einem Char direkt vergleichen! Das hast Du doch auch schon gemacht! Umwandeln ist also völlig überflüssig; Du musst nur alle Chars der beiden Strings einzeln behandeln.

Ist es denn so schwer, diesen Vorschlag zu verwirklichen?
user profile iconKhabarakh hat folgendes geschrieben:
Du musst jetzt nur noch die zwei Schleifen beliebig schachteln:
Entweder führst du für jedes Zeichen in "löschen" deine alte Methode, die ein einziges Zeichen löscht, aus,
oder du schaust innerhalb deiner bisherigen Schleife, ob "satz[no]" mit irgendeinem Char aus "löschen" übereinstimmt.


Jürgen

PS. Es ist mir bewusst, dass ich einen Rüffel von einem Moderator bekomme und verdient habe. Wenn ich aber dieses ständige Unverständnis lese, werde ich meinem Vorsatz untreu (mich hier nicht mehr mit Hilfe zu beteiligen) und werde entgegen meiner Gewohnheit unhöflich.

* Nachtrag als "technische" Korrektur: Der String als solcher ist natürlich ein eigenständiger Typ, abgeleitet von object. Aber als Liste der Zeichen kann er wie vom Typ Char[] behandelt werden - wie ja auch geschehen.


ridderle - So 25.05.08 12:07

ich habe in dem Methodenkopf einen String...
Das Problem ist nun eher, wie ich dann von dem String die Buchstaben vergleiche bzw. von den Chars.

Also der Code...