Autor Beitrag
sepp_a_u
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51

Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
BeitragVerfasst: Sa 13.10.07 20:01 
hi @ all

zur übung habe ich von nem kollegen vorgeschlagen bekommen, dass ich ein prog schreiben soll, bei welchem man einen string eingibt (so lang wie man will). dann soll man überprüfen, welche wörter darin doppelt vorkommen und diese ausschließen und danach die eingabe wieder ausgeben, jedoch ohne die doppelten wörter. als bsp.:

der benutzer gibt ein:
"ich heiße hans georg. ich wohne in musterhausen und ich bin 55 jahre alt."

nachdem mein prog dann durchlaufen ist, sollte die ausgabe so aussehen:

"ich heiße hans georg. wohne in musterhausen und bin 55 jahre alt."

also jedes wort, welches mehr als 1mal vorkommt wird ausgeschlossen.
ich hab schonmal angefangen und dachte mir, dass ich nach der eingabe erst mal die strings splitte. das habe ich bisher auch realisieren können. und jetzt muss ich ja die strings miteinander irgendwie vergleichen können, damit ich die doppelten ausschließen kann, richtig? doch da hängt es bei mir. wie kann ich eine solce abfrage gestalten? kann mir wer vll stichwörter sagen oder bsp machen oder so?
hier mal mein bisheriger code:

ausblenden 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;

namespace splitten
{
  class Program
  {
    public static void Main(string[] args)
    {
      string eingabe;
      Console.WriteLine("Bitte Satz eingaben: \n");
      eingabe = Console.ReadLine();      
      Splitten(eingabe);
      Console.ReadLine();
    }
    public static void Splitten(string input)
    {
      string[] split = input.Split(' ');
      for (int i = 0; i < split.Length; i++)
      {
        Console.WriteLine(split[i]);        
      }
    }
  }
}


wäre euch sehr dankbar :)

mfg


Moderiert von user profile iconChristian S.: Topic aus Allgemeine .NET-Fragen verschoben am Sa 13.10.2007 um 22:02
sepp_a_u Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51

Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
BeitragVerfasst: Sa 13.10.07 20:16 
hab jetzt ein wenig gesucht und bin auf hashtable gestoßen. also initialisiere ich einen neuen Hashtable. doch dann? weiße ich ihm einen wert zu? weiße ich ihm dann das string array split zu? oder wie mache ich das? komm mit dem noch nicht ganz zurecht, weil ich leider noch anfänger ibn

mfg
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 13.10.07 21:00 
Die Hashtable stammt noch von 1.1, benutze lieber ein Dictionary<string, object> (statt object kann auch jede andere Klasse benutzt werden, da wir in diesem Fall nur Schlüssel (die Wörter), aber keine Werte (könnte z.B. die Anzahl der Vorkommen des Wortes sein) haben). In dieses Dictionary kannst du dann mit Add(s, null) ein Wort s einfügen und mit ContainsKey(s) prüfen, ob s schon darin vorhanden ist.
sepp_a_u Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51

Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
BeitragVerfasst: Sa 13.10.07 21:59 
hmm würde es aber gerne mit einem hashtable machen. ist halt die vorgabe meines nachbarn ;) der meint, damit wäre es am einfachsten. vll weiß das wer, wie ich es damit machen kann? wäre absolut nice :)

mfg
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 13.10.07 22:13 
Eine HashTable hat auch die Methoden, welche Sebastian bei der Dictionary erwähnt. Das Vorgehen wäre also dasselbe, nur mit einer veralteten Klasse. :zwinker:

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
sepp_a_u Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51

Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
BeitragVerfasst: So 14.10.07 00:13 
so nach vielem lesen hab ich es jetzt geschafft! hier der code, wenn es wen interessiert:

ausblenden volle Höhe 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:
using System;
using System.Collections;

namespace splitten
{
  class Program
  {
    public static void Main(string[] args)
    {
      string eingabe;
      Console.WriteLine("Bitte Satz eingaben: \n");
      eingabe = Console.ReadLine();  
      Console.WriteLine("\n\n");
      Splitten(eingabe);      
      Console.ReadLine();
    }
    public static void Splitten(string input)
    {
      string[] split = input.Split(' ');
      Hashtable neu = new Hashtable();
      for (int i = 0; i < split.Length; i++)
      {    
        if(!neu.ContainsValue(split[i]))
        {
          neu.Add(i, split[i]);
        }  
        Console.Write(neu[i] + " ");
      }      
    }
  }
}


mfg
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 14.10.07 00:20 
Ich bezweifle, dass dieser Code tatsächlich funktioniert:
Wenn ein Wort nicht in die HashTable eingefügt wird, wird der Write-Befehl trotzdem ausgeführt. Darin wird aber auf einen Wert in der HashTable zugriffen, der da gar nicht eingefügt wurde.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
sepp_a_u Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51

Win Vista (Laptop), Win XP (PC)
C# (MS Visual Studio Express Edition)
BeitragVerfasst: So 14.10.07 00:42 
user profile iconChristian S. hat folgendes geschrieben:
Ich bezweifle, dass dieser Code tatsächlich funktioniert:
Wenn ein Wort nicht in die HashTable eingefügt wird, wird der Write-Befehl trotzdem ausgeführt. Darin wird aber auf einen Wert in der HashTable zugriffen, der da gar nicht eingefügt wurde.


dann kopier ihn doch spaßeshalber einfach mal und compiliere ihn. also bei mir klappt er. er macht auf jeden fall, was er tun soll. vll versteh ich diene aussage auch nicht ganz...

mfg
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 14.10.07 00:48 
Ein Code ist nicht richtig, nur weil er compiliert ;-)

An der Stelle unterscheiden sich Dictionary und HashTable: Ein Dictionary würde eine Exception werfen, wenn Du auf einen Eintrag mit einem Key zugreifst, den es nicht gibt. Die HashTable gibt nur null zurück, weshalb der Fehler nicht direkt auffällt. Außer dass ein Leerzeichen zuviel eingefügt wird.

Nimm z.B. den Satz: "Ich Ich bin da"

(1) "Ich" wird an Index 0 eingefügt, es wird neu[0] ausgegeben
(2) "Ich" wird nicht nochmal eingefügt, es existiert kein Key = 1. Es wird aber trotzdem versucht, neu[1] auszugeben. Die Hashtable ist gutmütig und gibt nur null zurück, in Deinem ausgegebenen Text erscheint ein Leerzeichen zuviel.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 14.10.07 11:36 
@highlander: :gruebel: Du hast meine Codeschnippsel genau umgedreht und damit die Hashtable absolut nutzlos gemacht. Bevor du die Wörter in Values und beliebige Werte in die Keys steckst, könntest du auch gleich mit einer Schleife in deinem ursprünglichen Array suchen. Die quasi-konstante Suchzeit einer Hashtable bekommst du nur, wenn das zu Suchende auch der Key ist.