spark82 - 43
Halbprofi
(offline)
Dabei seit 11.2006
240
Beiträge
|
Geschrieben am: 25.04.2007 um 08:06 Uhr
Zuletzt editiert am: 25.04.2007 um 08:10 Uhr
|
|
@Rifleman: Charakter-Arrays (z.B. "char[] x;") werden vom Compiler wie Pointer (z.B. "char *x;") behandelt.
@Moritz:
rechne dir zuerst die Länge des Strings aus,
gehe dann den String in einer for-Schleife durch, und vergleiche dabei
den Buchstaben an der Stelle 'i' mit dem Buchstaben an Stelle '(Stringlänge - i)'.
Dieser Algorithmuss sollte zum Ziel führen.
Ich könnte dir das schon ausimplementieren, aber dann wird dir ja langweilig
viel Spaß,
Christian
Das schlimmste an Zensur ist XXXXXXXX XXXXXX.
|
|
Rifleman - 40
Experte
(offline)
Dabei seit 09.2003
1540
Beiträge
|
Geschrieben am: 25.04.2007 um 13:52 Uhr
Zuletzt editiert am: 25.04.2007 um 14:23 Uhr
|
|
Zitat von spark82: @Rifleman: Charakter-Arrays (z.B. "char[] x;") werden vom Compiler wie Pointer (z.B. "char *x;") behandelt.
Ich weiss, ich weiss...
Aber char[] foo() _ist_ ein Syntaxfehler.
Eben mal getestet:
Zitat: error: expected unqualified-id before '[' token
/edit: Ist zwar alles schon ne Weile her, aber ich glaube, dass auch "char[] x;" in C keine valide Deklaration ist...
Es sind die kleinen Dinge, die einen zum Wahnsinn treiben.
|
|
rufinus - 37
Anfänger
(offline)
Dabei seit 04.2007
2
Beiträge
|
Geschrieben am: 25.04.2007 um 14:52 Uhr
Zuletzt editiert am: 25.04.2007 um 14:54 Uhr
|
|
doch, bei ansi c schon. [] "=" *
und wenn es strings sind, tendiere ich dazu, [] zu verwenden. natürlich kannst du in dem code alle [] durch * ersetzen.
|
|
spark82 - 43
Halbprofi
(offline)
Dabei seit 11.2006
240
Beiträge
|
|
Geschrieben am: 25.04.2007 um 15:48 Uhr
|
|
ich habs nicht überprüft, denke aber richtig müsste es so aussehen:
char x[0];
Ein Feld der Größe 0 ist sogut wie ein Pointer.
Der Thread-Ersteller hat aber noch nicht mit Pointern gearbeitet, wir sollten uns deshalb auch auf Lösungen mit Feldern beschränken. (Auch wenn der eine oder andere Pointer-Ansatz einfach wäre)
Das schlimmste an Zensur ist XXXXXXXX XXXXXX.
|
|
Polaris
Experte
(offline)
Dabei seit 07.2006
1766
Beiträge
|
Geschrieben am: 25.04.2007 um 16:12 Uhr
Zuletzt editiert am: 25.04.2007 um 16:14 Uhr
|
|
Zitat von Rifleman: Zitat von spark82: @Rifleman: Charakter-Arrays (z.B. "char[] x;") werden vom Compiler wie Pointer (z.B. "char *x;") behandelt.
Ich weiss, ich weiss...
Aber char[] foo() _ist_ ein Syntaxfehler.
Eben mal getestet:
Zitat: error: expected unqualified-id before '[' token
/edit: Ist zwar alles schon ne Weile her, aber ich glaube, dass auch "char[] x;" in C keine valide Deklaration ist...
arrays mit [] als Rückgabetyp in Funktionsdeklaration und -definition sind nicht erlaubt, da har Rifleman Recht, char* geht natürlich ... du kannst natürlich dein char-Array auch in eine Struktur packen und die dann zurückliefern, wenn dir das lieber ist, aber
type [anzahl oder auch nicht] bezeichner(parameter) {}
geht nicht
Patriotismus ist die Tugend der Bosheit! (Oscar Wilde)
|
|
Polaris
Experte
(offline)
Dabei seit 07.2006
1766
Beiträge
|
Geschrieben am: 25.04.2007 um 16:17 Uhr
Zuletzt editiert am: 25.04.2007 um 16:42 Uhr
|
|
Zitat von spark82: ich habs nicht überprüft, denke aber richtig müsste es so aussehen:
char x[0];
Ein Feld der Größe 0 ist sogut wie ein Pointer.
Der Thread-Ersteller hat aber noch nicht mit Pointern gearbeitet, wir sollten uns deshalb auch auf Lösungen mit Feldern beschränken. (Auch wenn der eine oder andere Pointer-Ansatz einfach wäre)
jain
int a[10] = {0,0,0,0,0,0,0,0,0,0};
// ein Aufruf von
a[x] = 0; // x sollte halt net höhter als 9 sein hier 
// wird übersetzt mit:
*(a + x) = 0;
//daher ist sogar
2[a] = 1;
//völlig gleichwertig mit
a[2] = 1;
//wenn das jemanden interessiert 
also
ist ein
char y[1];
nix anderes als ein
char *y;
Achja (editet):
der Compiler streicht dir ein "char y[0];" mit unknown size an ... so hättest du ja nicht mal Platz für eine Adresse zur Verfügung ...
trotzdem geht ein char * Func() und char [] Func() geht nicht
Patriotismus ist die Tugend der Bosheit! (Oscar Wilde)
|
|
Rifleman - 40
Experte
(offline)
Dabei seit 09.2003
1540
Beiträge
|
Geschrieben am: 25.04.2007 um 16:40 Uhr
Zuletzt editiert am: 25.04.2007 um 17:46 Uhr
|
|
Zitat von Polaris: trotzdem geht ein char * Func() und char [] Func() geht nicht
Es hätte mich schon sehr gewundert, wenn das ausgerechnet in ansi-c valid gewesen wäre....
Damit der Threadresteller auch was von der Diskussion hier hat habe ich das ganze mal korrigiert und fertiggeschrieben:
Zitat: #include < stdlib.h >
#include < string.h >
#include < stdio.h >
#define BUFFER_SIZE 80
char *strrev(char *str)
{
int i, len = str_length(str);
char *rev = (char*)malloc(sizeof(char)*(len+1));
for (i = 0; i < len; i ++) {
rev[i] = str[len-1-i];
}
rev[len] = '\0';
return rev;
}
int is_palindrome(char *str)
{
char* rev = strrev(str);
int r = !strcmp(str, rev);
free(rev);
return r;
}
int str_length(char *str)
{
int length = 0;
for (; str[length] != '\0'; length++) {}
return length;
}
int main(int argc, char *argv[])
{
char buf[BUFFER_SIZE];
puts("Enter string to check:");
fgets(buf,BUFFER_SIZE,stdin);
printf("%s %s\n","Is Palindrome: ", is_palindrome(strtok(buf,"\n")) ? \
"Yes" : "No");
return 0;
}
Das ganze ist ansi-c:
Zitat: $ gcc -ansi ./test.c
$
Folgende Fehler korrigiert:
- return-type
- in strrev: rev[i] = str[len-1-i] statt [len-i]
andernfalls nimmt strrev das \0 mit und setzt es an den Anfang von rev.
-bool gibts in ansi-c nicht
-strlen sollte nicht verwendet werden
Vieles geht wohl immer noch besser...sehr unschön ist wohl strtok, um das newline zu entfernen, das fgets mitliest...aber was solls
Es sind die kleinen Dinge, die einen zum Wahnsinn treiben.
|
|
Rifleman - 40
Experte
(offline)
Dabei seit 09.2003
1540
Beiträge
|
|
Geschrieben am: 25.04.2007 um 16:48 Uhr
|
|
Zitat von Polaris: der Compiler streicht dir ein "char y[0];" mit unknown size an ... so hättest du ja nicht mal Platz für eine Adresse zur Verfügung ...
Die Addressen kommen ja nicht *in* den Array, die Addresse *ist* der Array.
Mein Compiler zumindest lässt das duchgehen...fragt sich nur, warum man so etwas machen sollte...
Es sind die kleinen Dinge, die einen zum Wahnsinn treiben.
|
|
youngturner - 34
Halbprofi
(offline)
Dabei seit 12.2004
334
Beiträge
|
|
Geschrieben am: 25.04.2007 um 16:58 Uhr
|
|
wo lernt man sowas? 
sieht echt interessant aus..
|
|
spark82 - 43
Halbprofi
(offline)
Dabei seit 11.2006
240
Beiträge
|
|
Geschrieben am: 25.04.2007 um 17:28 Uhr
|
|
Zitat von Rifleman:
[...]
Damit der Threadresteller auch was von der Diskussion hier hat habe ich das ganze mal korrigiert und fertiggeschrieben:
[...]
Vielleicht haben wir ihn ein klein wenig überrannt. Er hat geschrieben, dass er den Umgang mit Pointern noch nicht hatte - in dem Beispiel verwendest du das, dazu Sachen wie malloc, free,... Ich glaube nicht, dass ihm das viel bringt, aber vielleicht kann er sich selbst dazu äußern. *WinkMitDemZaunpfahlAnMoritz*
Das schlimmste an Zensur ist XXXXXXXX XXXXXX.
|
|
gaucho - 41
Halbprofi
(offline)
Dabei seit 10.2004
120
Beiträge
|
Geschrieben am: 25.04.2007 um 17:46 Uhr
Zuletzt editiert am: 25.04.2007 um 17:47 Uhr
|
|
Täusche ich mich, oder wurde das Problem nicht schon auf Seite 1 gelöst ?
Die hier geführte Diskussion um irgendwelche Zeiger und Arrayrückgaben hat jedenfalls kaum mehr was mit der eigentlichen Problemstellung zu tun, ganz davon abgesehen, dass zur Lösung des Problems das alles nicht benötigt wird.
Genausowenig ist es sinnvoll hier einen Quelltext zu posten, der sich 1:1 so übertragen lässt, dessen Sinn aber jemand der keine Zeiger kennt nicht versteht. Da das ganze zum Lernen gedacht ist, erfüllt das also absolut keinen Zweck.
|
|
Rifleman - 40
Experte
(offline)
Dabei seit 09.2003
1540
Beiträge
|
|
Geschrieben am: 25.04.2007 um 17:57 Uhr
|
|
Zitat von gaucho: Genausowenig ist es sinnvoll hier einen Quelltext zu posten, der sich 1:1 so übertragen lässt, dessen Sinn aber jemand der keine Zeiger kennt nicht versteht. Da das ganze zum Lernen gedacht ist, erfüllt das also absolut keinen Zweck.
Ich habe nur Rufinus Ansatz aufgegriffen, dass hier nicht ein Quellcode stehen bleibt, der sich weder compilieren lässt noch das tut, was er soll.
Das ganze war *nicht* als gute Lösung der Aufgabe gedacht (und ist es auch nicht), auch wenn Teile davon dafür evtl brauchbar sind. Und schaden kann es bestimmt nicht, wenn man von Pointern schon mal gehört hat, erst recht nicht bei C.
Es sind die kleinen Dinge, die einen zum Wahnsinn treiben.
|
|
Caarcrinolas - 41
Profi
(offline)
Dabei seit 02.2006
909
Beiträge
|
Geschrieben am: 25.04.2007 um 19:10 Uhr
Zuletzt editiert am: 25.04.2007 um 19:14 Uhr
|
|
Zitat von gaucho: Genausowenig ist es sinnvoll hier einen Quelltext zu posten, der sich 1:1 so übertragen lässt, dessen Sinn aber jemand der keine Zeiger kennt nicht versteht. Da das ganze zum Lernen gedacht ist, erfüllt das also absolut keinen Zweck.
Als ich z.B. in VB damals was neues angewendet habe in einer KA was noch gar nicht besprochen wurde, musste es dennoch akzeptiert werden.....
Schließlich kann man mir nicht verbieten meinen eigenen geistigen Horizont zu erweitern und das daraus resultierende Wissen anzuwenden.
Im Endeffekt ist das auch kein Vorteil anderen gegenüber, denn Jeder hätte sich das Wissen aneignen können.
Daher lebe lieber nach der ACL Direktive. Alles was nicht ausdrücklich verboten wurde, ist erlaubt.
Das einzige was passieren würde wenn ich bestraft werde, wegen Zusatzwissen ist eine schriftliche Beschwerde ans Kultusministerium
Aristoteles: "Es gibt kein großes Genie ohne einen Schuß Verrücktheit."
|
|
Polaris
Experte
(offline)
Dabei seit 07.2006
1766
Beiträge
|
Geschrieben am: 25.04.2007 um 20:27 Uhr
Zuletzt editiert am: 25.04.2007 um 20:28 Uhr
|
|
Zitat von Rifleman: Zitat von Polaris: der Compiler streicht dir ein "char y[0];" mit unknown size an ... so hättest du ja nicht mal Platz für eine Adresse zur Verfügung ...
Die Addressen kommen ja nicht *in* den Array, die Addresse *ist* der Array.
Mein Compiler zumindest lässt das duchgehen...fragt sich nur, warum man so etwas machen sollte...
meiner haut's mir weg -.- war aber auch ein C++ Compiler ...
wie schon mal gesagt, meine C Aussagen sind nicht immer ganz korreckt, ich hab nie wirklich reines C gelernt - kenne mich einigermaßen damit aus, um Code lesen und einfache Progrämmchen schreiben zu können reicht's, aber für mehr auch nicht, da greife ich lieber zu C++, damit kenne ich mich wesentlich besser aus und damit komme ich gut zurecht und meine C Codes sind oft sehr scheiße, aus Sicht eines C-Programmierers, wobei ich das gleiche über viele C++ Codes (sicher nicht alle) von C Programmierern sage *fg* -.-
Die Sprachen sind zwar nah verwandt aber eben auch nicht Zwillinge .
Patriotismus ist die Tugend der Bosheit! (Oscar Wilde)
|
|
Polaris
Experte
(offline)
Dabei seit 07.2006
1766
Beiträge
|
|
Geschrieben am: 25.04.2007 um 20:44 Uhr
|
|
Zitat von gaucho: Täusche ich mich, oder wurde das Problem nicht schon auf Seite 1 gelöst ?
Die hier geführte Diskussion um irgendwelche Zeiger und Arrayrückgaben hat jedenfalls kaum mehr was mit der eigentlichen Problemstellung zu tun, ganz davon abgesehen, dass zur Lösung des Problems das alles nicht benötigt wird.
Wenn hier diskussionsbedarf besteht, warum nicht die Diskussion führen , auch wenn das "eigentliche Problem" schon gelöst ist.
Zitat:
Genausowenig ist es sinnvoll hier einen Quelltext zu posten, der sich 1:1 so übertragen lässt, dessen Sinn aber jemand der keine Zeiger kennt nicht versteht. Da das ganze zum Lernen gedacht ist, erfüllt das also absolut keinen Zweck.
Nun, wir arbeiten hier unter C, und mit den Vorgaben hier wirst du schlecht um char-Arrays bzw. -Pointer herumkommen
std::string gibt's net in C ... Jeder der C oder C++ programmiert sollte sich außerdem mit Pointern auseinandersetzen und damit arbeiten können, sonst wird er sehr schnell Schwierigkeiten haben auch nur andere Codes zu lesen.
Patriotismus ist die Tugend der Bosheit! (Oscar Wilde)
|
|