Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » 2 Strings auf Anagramm prüfen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
30.04.2007, 00:03 Uhr
~jack26
Gast


Hi Leute,

ich möchte gerne eine Funktion schreiben, die zwei übergebene Strings prüft, ob es Anagramme sind.

Hier eine Erklärung, falls jemand keine Anagramme kennt:
Anagramme sind Wörter, die bei Umstellung der Zeichen ein neues Wort bilden, z.B. wird aus
"Erbgut" -> "Geburt"
oder aus
"Alles wird gut" -> "Lustiger Wald"

Klein- und Großbuchstaben, sowie Leerzeichen werden dabei ignoriert.

Wäre für jede Hilfe dankbar.

Grüße
jack26
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.04.2007, 00:05 Uhr
~jack26
Gast


das hätte ich beinahe vergessen, das ganze muss in C, nicht in C++ sein...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.04.2007, 00:20 Uhr
Lensflare



ich würde alle 'A's zählen, alle 'B's usw, dann überprüfen, ob in dem anderen strings genauso viele davon drin sind.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 30.04.2007 um 00:27 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.04.2007, 01:09 Uhr
Lensflare




C++:
#include <stdio.h>
#include <ctype.h>

bool anagramm(char *s1, char *s2)
{
  int a1[26];
  int a2[26];
  
  bool b = true;
  
  for(int i=0; i<26; i++)
  {
    a1[i] = 0;
    a2[i] = 0;
  }
  
  while(*s1 != '\0')
  {
    if(isalpha(*s1))
      a1[toupper(*s1)-65]++;
    
    if(isalpha(*s2))
      a2[toupper(*s2)-65]++;
      
    s1++;
    s2++;
  }
  
  for(int i=0; i<26; i++)
  {
    if(a1[i] != a2[i])
      b = false;
  }  
  
  return b;
}

int main()
{
  if(anagramm("Alles wird gut","Lustiger Wald"))
    printf("ja");
  else
    printf("nein");
    
  getchar();
}



Ich habe das zwar mit einem C++ compiler getestet, aber ich denke so sollte es auch in C gehen.

Man muss nur beachten, dass die beiden übergebenen strings nicht unterschiedlich lang sein dürfen.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
30.04.2007, 01:46 Uhr
Pablo
Supertux
(Operator)


und was sollte anagram("Hallo", "ohLal") zurückgeben? Bei dir true, aber ohLal ist kein deutsches Wort, also sind das keine Anagrame.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
30.04.2007, 02:08 Uhr
Lensflare



man könnte ja zusätzlich eine Liste mit allen deutschen Wörtern anlegen und die strings abchecken.
Wo man diese Wörter herbekommt und wie man sie in die Liste hineinbekommt ist schon eine andere Aufgabe.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
30.04.2007, 09:05 Uhr
ao

(Operator)



Zitat von Lensflare:

Man muss nur beachten, dass die beiden übergebenen strings nicht unterschiedlich lang sein dürfen.

Wenn das der Fall ist, kann es kein Anagramm sein. Also vorher einfach mit strlen beide Wörter messen.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
30.04.2007, 09:26 Uhr
ao

(Operator)



Zitat von Pablo:
und was sollte anagram("Hallo", "ohLal") zurückgeben? Bei dir true, aber ohLal ist kein deutsches Wort, also sind das keine Anagrame.

Doch, nach dieser Definition schon: http://de.wikipedia.org/wiki/Anagramm . Es ist nicht entscheidend, ob die Wörter in der deutschen Sprache (oder in irgendeiner anderen) eine Bedeutung haben.

An jack26: Das klingt nach Hausaufgabe. Falls ihr folgende Aufgaben schon bearbeitet habt:
* Umwandeln von Groß- in Kleinbuchstaben oder umgekehrt
* Filtern von Strings (z.B. alle Leerzeichen und Satzzeichen rauswerfen)
* Sortieren (z.B. alle in einem String vorkommenden Buchstaben alphabetisch ordnen)
* Vergleichen von Strings
hast du die Einzelteile schon fertig und musst sie nur noch passend kombinieren.

Gruß,
ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
01.05.2007, 23:07 Uhr
~jack26
Gast


Ne das ist keine Hausaufgabe, das war einmal eine Prüfungsaufgabe und ich hab mich eben gefragt wie man das programmiert, da ich dass mit 26 Variablen gelöst hätte...

@Lensflare: Irgendwie funktioniert dein Code bei mir nicht, gibt bei mir immer nein aus.
Kannst du mir bitte auch sagen warum du -65 rechnest, steh da gerade etwas aufm Schlauch ;-)

Aber vielen Dank für eure Antworten, ihr seid die Besten.

Gruß
jack26
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
01.05.2007, 23:14 Uhr
Suba Esel



Die Länge ist nicht unbedingt entscheidend, da ja die Leerzeichen nicht zählen.
Beispiel oben:

Zitat von jack26:
"Alles wird gut" -> "Lustiger Wald"

Die beiden Strings sind unterschiedlich lang, weil verschieden viele Leerzeichen da sind. Trotzdem sind sie ein Anagramm.
--
Simon
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: