Zum Inhalt springen
  • 0

c# | String manipulation


Frage

Geschrieben
string.ToCharArray() oder var letter = string[i]

gibt mir jeweils den ASCII Code und den Character zurück z.B. für den Buchstaben "a" => 97'a'

Soll das so sein? Ich möchte nur den Buchstaben, ohne ASCII Index.

8 Antworten auf diese Frage

Empfohlene Beiträge

  • 0
Geschrieben (bearbeitet)

In der Informatik gibt es nur Zahlen. Ein char ist ebenfalls nichts weiter als eine Zahl. Die Zahl kann ein oder zwei Bytes groß sein. Jede Zahl repräsentiert ein Zeichen. Deswegen gibt es ja die ASCII-Tabelle. Die ASCII-Tabelle ist beispielsweise in der GPU implementiert. Somit weiß die GPU, wenn sie sich im Text-Modus befindet, wie ein Zeichen aussehen soll.

Du kannst ja folgenden Code ausprobieren:

Console.WriteLine((char)97); // gibt 'a' aus
Console.WriteLine((int)'a'); // gibt 97 aus
Console.WriteLine((char)('a' + 3)); // gibt 'd' aus

'a' ist einfach der Wert 97.

Bearbeitet von Whiz-zarD
  • 0
Geschrieben (bearbeitet)

Es geht mir um die Darstellung der Werte.

z.B. würde ich die Anzahl von Vokalen in einem Text zählen wollen:

Variante1:
int vowelCount = 0;
List<string> vowelList = new List<string>();
vowelList = "a,e,i,o,u".Split(",").ToList();

 foreach(var element in vowelList){
     for(int i =0; i < str.Length-1;i++)
     {
        var letter = str[i];
        if (element.Equals(letter))
          {
           vowelCount++;
          }
     }                    
  }

variante2:
hier ändere ich nur die for schleife

 foreach(var element in vowelList){
    for(int i =0; i < str.Length-1;i++)
    {
       string letter = "";
       letter += str[i];
       if (element.Equals(letter))
          {
            vowelCount++;
          }                    
     }


 return vowelCount;

In Variante 1 vergleicht  er in der if anweisung a mit 91'a' und erhält false zurück.

In Variante 2 vergleicht er in der if anweisung a mit a und erhählt true zurück.

Verstehe ich nicht ganz, wieso.

Kann ich string und char in C# nicht mit .Equals vergleichen?

Bearbeitet von TheWorldDrown
  • 0
Geschrieben (bearbeitet)

In der ersten Variante vergleichst du ein String mit einem Char. Die Datentypen sind schon verschieden. Der Vergleich kann also nie funktionieren. Ein char ist nur ein Zeichen, während ein String aus mehreren Zeichen besteht. Ein String ist zudem auch ein Referenztyp (class) und Char ein Wertetyp (struct).

vowelList ist eine Liste von Strings und mit str/[i/]  holst du ein Char. Du musst also vowelList ist eine Liste oder in ein Array von Chars ändern.

var vowelList = new[] { 'a', 'e', 'i', 'o', 'u' };

 

Bearbeitet von Whiz-zarD
  • 0
Geschrieben (bearbeitet)

Was ist str? Das ist in dem Code gar nicht deklariert.

Desweiteren hättest du es schon bei der Beschreibung von  Equals sehen müssen.

stringObj.PNG.873fa3dcaa6d7c9a3595b7d1f8b69396.PNG

auch der "==" Operator hätte dir gesagt, dass ein Vergleich von string und char nicht möglich sei, da du zwei total unterschiedliche Typen von Objekte vergleichst (Equals vergleicht Werte während == auch die Objekt Referenz prüft). 

stringnotchar.PNG.9624ef4e939cfa3c1a4045a45ce0cd29.PNG

Übrigens. Warum instanziierst du nicht gleich die Liste vowelList bei ihrer Deklaration?

Arbeitest du mit ner IDE oder mit nem Editor?

Du könntest das Problem ziemlich simpel umgehen, wenn du die .Contains() Methode nutzt...vorausgesetzt, dass "element" auch nur ein Buchstabe ist. Ansonsten müsstest du letter mit .ToString() in einen String Wert wandeln.

  Am 1.3.2020 um 08:20 schrieb Whiz-zarD:

ein String aus mehreren Zeichen besteht

Aufklappen  

hm? Damit textest du ihm/ihr aber jetzt was falsches ein. Ein String ist kann beliebig viele Zeichen sein. Es ist eine Auflistung von char Objekten...diese kann auch nur ein Objekt haben oder gar leer sein.

Bearbeitet von KeeperOfCoffee
  • 0
Geschrieben

Motzen wegen des motzens Willen, oder was?

  Am 1.3.2020 um 08:42 schrieb KeeperOfCoffee:

Was ist str? Das ist in dem Code gar nicht deklariert.

Aufklappen  

Aus dem Kontext kann man doch erkennen, dass es sich um ein String handelt...

  Am 1.3.2020 um 08:42 schrieb KeeperOfCoffee:

hm? Damit textest du ihm/ihr aber jetzt was falsches ein. Ein String ist kann beliebig viele Zeichen sein. Es ist eine Auflistung von char Objekten...diese kann auch nur ein Objekt haben oder gar leer sein.

Aufklappen  

Und wo liegt nun der Unterschied zwischen

  Am 1.3.2020 um 08:20 schrieb Whiz-zarD:

während ein String aus mehreren Zeichen besteht.

Aufklappen  

und

  Am 1.3.2020 um 08:42 schrieb KeeperOfCoffee:

Ein String ist kann beliebig viele Zeichen sein.

Aufklappen  

?

Erkläre mir das mal. Zumal ein String eben nicht beliebig viele Zeichen haben kann, da ein String auf 2 GB beschränkt ist...

  • 0
Geschrieben
  Am 1.3.2020 um 08:20 schrieb Whiz-zarD:

Ein char ist nur ein Zeichen, während ein String aus mehreren Zeichen besteht

Aufklappen  

Wenn wir davon ausgehen, dass es ein Anfänger ist, kann man dies sehr leicht als Implizierung sehen.

  Am 1.3.2020 um 09:22 schrieb Whiz-zarD:

Motzen wegen des motzens Willen, oder was?

Aufklappen  

Ja ich bin hier im Forum ein total typiscer User der jeden anpöbelt und rummotzt.

  Am 1.3.2020 um 09:22 schrieb Whiz-zarD:

Aus dem Kontext kann man doch erkennen, dass es sich um ein String handelt...

Aufklappen  

Nein tut es nicht, da sein Code sonst funktionieren würde.

  Am 1.3.2020 um 09:22 schrieb Whiz-zarD:

Erkläre mir das mal. Zumal ein String eben nicht beliebig viele Zeichen haben kann, da ein String auf 2 GB beschränkt ist...

Aufklappen  

Ist schon klar, dafür haben wir ja auch maxLength. Wenn du aber einen 2GB String hast machst du wohl schon von vornherein was falsch. In der Praxis wäre das schon ein no go.

  • 0
Geschrieben
  Am 1.3.2020 um 09:40 schrieb KeeperOfCoffee:

Ja ich bin hier im Forum ein total typiscer User der jeden anpöbelt und rummotzt.

Aufklappen  

Ja, so kommt es mir gerade vor.

  Am 1.3.2020 um 09:40 schrieb KeeperOfCoffee:

Nein tut es nicht, da sein Code sonst funktionieren würde.

Aufklappen  

Da die letzte Zeile ein return ist, muss es sich hier um den Inhalt einer Methode handeln und str wird in die Methode reingereicht und da er die Vokale in einem String zählen möchte, handelt es sich kontextmäßig bei str im einen String, der in eine Methode reingereicht wird... Also doch! Kontextmäßig wäre dies zu erkennen. Einzig hätte man ihn darauf hinweisen sollen, dass am lieber die gesamte Methode zeigen sollte aber jeder, der mal 5 Sekunden darüber nachdenkt, hätte es begriffen...

  Am 1.3.2020 um 09:40 schrieb KeeperOfCoffee:

Ist schon klar, dafür haben wir ja auch maxLength. Wenn du aber einen 2GB String hast machst du wohl schon von vornherein was falsch. In der Praxis wäre das schon ein no go.

Aufklappen  

Wenn du hier schon die "Er ist doch ein Anfänger"-Keule rausholst, wäre es eben falsch zu sagen, dass ein String beliebig groß sein kann, denn das stimmt einfach nicht. Und String hat keine maxLength-Property. Erzähle doch nicht so einen Quatsch!

  • 0
Geschrieben

Ok bei meinem Test heute morgen habe ich für str eine List hergenommen. War etwas genervt das der Code nicht vollständig war.

  Am 1.3.2020 um 09:53 schrieb Whiz-zarD:

Ja, so kommt es mir gerade vor.

Aufklappen  

Tut mir sehr Leid. Ich möchte eigentlich nur diskutieren und bin nicht daran interessiert jemanden anzugreifen. Wenn das so rüberkommt, dann sind Diskussionen nicht möglich. Ich werde mich dann zukünftig raushalten.

  Am 1.3.2020 um 09:53 schrieb Whiz-zarD:

Wenn du hier schon die "Er ist doch ein Anfänger"-Keule rausholst, wäre es eben falsch zu sagen, dass ein String beliebig groß sein kann, denn das stimmt einfach nicht.

Aufklappen  

Ja stimmt, wenn ich davon ausgehe muss ichs auch von mir erwarten.

  Am 1.3.2020 um 09:53 schrieb Whiz-zarD:

. Erzähle doch nicht so einen Quatsch!

Aufklappen  

Stimmt mein Fehler. Bin ned mehr am PC und war zu faul nachzusehen. War überzeugt, dass es da irgendwas gibt.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Weiterlesen  

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...