Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Rätselecke » nicht casesensitives strcmp

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 < [ 3 ] [ 4 ]
010
14.09.2004, 18:02 Uhr
0xdeadbeef
Gott
(Operator)


Du Feigling zählst ja eh nur zwischen den Klammern. Im Übrigen hab ich auch grad festgestellt, dass *s|*r als Abbruchbedingung nicht taugt. Um das && kommt man da nicht rum.

Ansonsten ist die rekursive Idee aber nicht blöde, muss ich anerkennen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 14.09.2004 um 18:04 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
14.09.2004, 18:05 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Ansonsten ist die rekursive Idee aber nicht blöde, muss ich anerkennen.


danke das streichelt meine Seele
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
14.09.2004, 18:07 Uhr
virtual
Sexiest Bit alive
(Operator)


40 Zwischen den Klammern:

C++:
int f(const char* a, const char* b) {return((*a^*b)&95)+!*a?*a|*b:f(a+1,b+1);}

--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
14.09.2004, 18:08 Uhr
Pablo
Supertux
(Operator)


ok, meine


C++:
int stricmp(const char* a, const char* b)
{
    int d=0;while(*a++&&*b++){d+=tolower(*a)-tolower(*b);}return d;
}



aber sind 63 Zeichen. Damit verloren
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 14.09.2004 um 18:09 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
14.09.2004, 18:08 Uhr
0xdeadbeef
Gott
(Operator)


Ach verdammt. Ich verzettel mich grad dauernd - natürlich gehts mit | in diesem Zusammenhang - wenn die Strings nicht gleich lang sind, fliegt er ja innerhalb der Schleife raus. Also wieder:

C++:
f(s,t)char*s,*t;{while(*s|*t)if((*s++^*t++)&~32)return 1;return*s|*t;}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 14.09.2004 um 18:13 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
14.09.2004, 18:12 Uhr
virtual
Sexiest Bit alive
(Operator)


Da 7 Bit ASCII gewünscht kannst Du "&~32" durch "&95" ersetzen. Dann hast Du sogar zwei Weniger als meine
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
14.09.2004, 18:14 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@beefy
und das schöne ist das es ein zeichen weniger ist als virtis
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
14.09.2004, 18:21 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat von Windalf:
@beefy
und das schöne ist das es ein zeichen weniger ist als virtis

Nicht wirklich:

C++:
int f(const char* a, const char* b) {return!*a+(*a^*b)&95?*a|*b:f(a+1,b+1);}


38 Zwischen den klammern
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 14.09.2004 um 18:22 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
14.09.2004, 18:22 Uhr
Pablo
Supertux
(Operator)


@beefy:
sollte es nicht while(*s&*t) statt while(*s|*t)? Weil wenn s und t unterschiedlicher Länger sind, kann es zu Probleme führen, oder?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
14.09.2004, 18:24 Uhr
0xdeadbeef
Gott
(Operator)


Heh. Mir fällt aber gerade auf, dass all diese Lösungen fehlerhaft sind - was ist, wenn der erste String kürzer als der zweite ist und an der Stelle, an der der erste Sentinel hängt, im zweiten String ein Leerzeichen steht, schlägt der Vergleich nicht fehl und die Funktion segfaultet möglicherweise. In meiner Lösung ist das einfach zu beheben:

C++:
f(s,t)char*s,*t;{while(*s&&*t)if((*s++^*t++)&~32)return 1;return*s|*t;}


...bei euch beiden ist das nicht so einfach.

@pablo: Mit & kommen wir nicht weiter, nein. Stell dir z.B. vor, *s = 'A' = 65 und *t = ' ' = 32, dann ist *s & *t == 65 & 32 == 0.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 14.09.2004 um 18:25 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ] [ 4 ]     [ Rätselecke ]  


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: