3Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
188
188
EMPFEHLEN
-
22.08.11 13:14 #1
- Registriert seit
- Jun 2011
- Beiträge
- 76
Hallo zusammen!
Die Aufgaben etc. stehen eigentlich schon in den Comments
.
Ich weis nicht wie ich da genau vorgehen soll.
Soll ich z.b. die länge des gesamten Strings zählen, so wie man das halt beim zusammenfügen eines Strings macht?
MfG Googlehupf
Code cpp: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 32 33 34 35 36 37 38 39
//Aufgabe: Schreiben Sie ein Programm das Wörter teilt, wenn Doppelbuchstaben vorkommen. // //Beispiel: //String A: Wetter -> Das "ter" dann in nen neuen String rein --> String A: "Wet" und String B: "ter" #include <stdio.h> #define MAX_LEN 100 void share(char a[], char b[]); void share(char a[], char b[]) { int x=0; int i=0; while(a[x] != '\0') { if(a[x] == a[x+1]) { a[x]='\0'; b[i]=a[x+1]; } } } int main() { char a[MAX_LEN]; // Gesamter String char b[MAX_LEN]; //In diesem String soll dann die 2. Hälfte des Wortes stehn, wenn ein Doppebuchstaben vorhanden is. Im oberen Bespiel: "ter" printf("Eingabe(1 Wort):\n"); gets(a); printf("1. Hälfte: %s\n",a); printf("2. Hälfte: %s\n",b); return(0); }
Das zusammenfügen eines Strings:
Das ist mir irgendwie viel leichter gefallen wie das andere Bsp
.
Code cpp: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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
#include <stdio.h> #define MAX_LEN 200 void strcat(char a[], char b[]); int zaehlen(char a[]); void strcat(char a[], char b[]) { int i=0; int laenge=0; laenge = zaehlen(a); a[laenge] = ' '; do { a[laenge+1]=b[i]; i++; laenge++; } while(b[i]!='\0'); a[laenge+1]='\0'; } int zaehlen(char a[]) { int laenge=0; do { laenge++; } while(a[laenge] != '\0'); return laenge; } int main (void) { char a[MAX_LEN]; char b[MAX_LEN]; printf("Geben Sie bitte 2 Woerter ein.\n"); printf("Wort1: "); gets(a); printf("Wort2: "); gets(b); strcat(a,b); printf("\nNeuer string: %s\n",a); }
-
Hi
zu share: Warum zählen?
Zuerst den ersten String durchgehen, bis man einen Doppelbuchstaben oder das Stringende findet.
Wenn Stringende: Einen Leerstring in den zweiten und Ende.
Sonst: Da den ersten String abschneiden, ab da Buchstaben bis zum alten Stringende in den zweiten kopieren.
Und strcat ist auch unnötig kompliziert...
Ich schreib mal ein Codebeispiel.
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
char *mystrcat(char *z, const char *q) { while(*z) z++; while(*q) *(z++) = *(q++); *z = '\0'; return z; } void myshare(char *a, char *b) { if(*a == '\0') return; while(*(a + 1) && *a != *(a + 1)); a++; if(*a == '\0') { *b = '\0'; return; } *(b++) = *a; *(a++) = '\0'; while(*a) *(b++) = *(a++); *b = '\0'; }
Ungetestet.
GrußGeändert von sheel (22.08.11 um 13:55 Uhr)
-
22.08.11 16:39 #3
- Registriert seit
- Jun 2011
- Beiträge
- 76
Es ist sehr nett von dir, für mich extra nen Code zu schreiben. Danke, wirklich!
.
Sorry, aber leider kann ich ihn nicht entziffern, solche Schreibweise lernen wir nicht, oder "noch" nicht ich weis es nicht.
Ich hab es jetzt so hingebracht das beim String a "Hal" da steht und beim String b "l".(Die Eingabe ist: Hallo)
Code cpp: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 32 33 34 35 36 37 38 39 40 41 42 43 44 45
//Aufgabe: Schreiben Sie ein Programm das Wörter teilt, wenn Doppelbuchstaben vorkommen. // //Beispiel: //String A: Wetter -> Das "ter" dann in nen neuen String rein --> String A: "Wet" und String B: "ter" #include <stdio.h> #define MAX_LEN 100 void share(char a[], char b[]); void share(char a[], char b[]) { int i=0; int x=0; while(a[x] != '\0') { if(a[x] == a[x+1]) { b[i]=a[x+1]; a[x+1]='\0'; } x++; i++; } b[i]='\0'; } int main() { char a[MAX_LEN]; // Gesamter String char b[MAX_LEN]; //In diesem String soll dann die 2. Hälfte des Wortes stehn, wenn ein Doppebuchstaben vorhanden is. Im oberen Bespiel: "ter" printf("Eingabe(1 Wort):\n"); gets(a); share(a,b); printf("1. Haelfte: %s\n",a); printf("2. Haelfte: %s\n",b); return(0); }
GrüßeGeändert von Googlehupf (24.08.11 um 08:28 Uhr)
-
Hier etwas einfacher angeschrieben:
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
void myshare(char *a, char *b) { if(*a == '\0') return; while(a[1] != '\0' && a[0] != a[1]); a++; if(a[0] == '\0') { b[0] = '\0'; return; } b[0] = a[0]; a[0] = '\0'; b++; a++; while(a[0] != '\0') { b[0] = a[0]; a++; b++; } b[0] = '\0'; }
edit:
2 Fehler in deinem Code:
1) Bleibt bei b ein Platz von a-Länge frei.
Also zB. "Butter" wird zu:
a: But
b: ###ter
wobei # irgendwas zufälliges ist.
2) Schreibst du bei Butter nur das t in b, e und r werden wieder nicht erkannt, weil sie keine Doppelbuchstaben sind.
GrußGeändert von sheel (22.08.11 um 17:08 Uhr)
-
24.08.11 08:27 #5
- Registriert seit
- Jun 2011
- Beiträge
- 76
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
void myshare(char *a, char *b) = void myshare(char a[], char b[]) Oder? Aber eins verstehe ich nicht. Hier z.B: while(a[0] != '\0') { b[0] = a[0]; a++; b++; } Warum zahlst du da die "Strings" a und b ++. Du verwendest immer a[0]. Warum net a[x] und dann x++ z.B.?
-
24.08.11 09:11 #6
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.Ja.
Das liegt daran, das Arrays im Grunde nur Zeiger sind. (Ihr hattet noch keine Zeiger, oder?!)
Das liegt daran, weil Strings im Grunde nur Zeiger sind...
Zeiger zeigen auf bestimmte Dinge, bzw. merken sich die Adresse von anderen Dingen.
x ist ein Zeiger. Der Zeiger x zeigt auf den String "abc" irgendwo im Speicher. D.h. in x ist die Adresse (eine Zahl) dieses Strings gespeichert. Der String selbst ist also z.B. ab Adresse 123 (da steht das 'a') gespeichert. Das 'b' hat dann die Adresse 124, 'c' 125 usw.Code c:1
const char* x = "abc";
Inkrementiert den Zeiger. D.h. der Zeiger x speichert nicht mehr die Adresse 123, sondern 124. D.h. er zeigt nicht mehr auf das 'a', sondern auf das 'b' - oder man könnte auch sagen er zeigt auf den String "bc", da der Zeiger eben einfach eine Position weiter nach rechts gerückt ist.Code c:1
++x;
Das wäre auch möglich. So spart man sich allerdings eine extra Variable und die Berechnung beim Indexzugriff.Code c:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
int main() { char s[] = "ABC"; char* p = s; printf("Adresse von \"ABC\": %p\n", s); printf("gespeicherte Adresse: %p\n", p); printf("Wert von p: %c\n", *p); printf("s[0]: %c\n", s[0]); ++p; printf("gespeicherte Adresse: %p\n", p); printf("Wert von p: %c\n", *p); printf("s[1]: %c\n", s[1]); ++p; printf("gespeicherte Adresse: %p\n", p); printf("Wert von p: %c\n", *p); printf("s[2]: %c\n", s[2]); }
Der Zugriff über den Index ist nämlich nur "syntaktischer Zucker":
a[x] bedeutet also dasselbe wie den Zeiger erstmal um x Stellen "weiter zu schieben" und dann auf den Wert zuzugreifen.Code :1
a[x] === *(a+x)
GrußGeändert von deepthroat (24.08.11 um 09:14 Uhr)
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
Ähnliche Themen
-
Strings Splitten / Teilen
Von Davicito im Forum C/C++Antworten: 18Letzter Beitrag: 22.05.11, 17:18 -
Zeilenausgabe eines Strings
Von Benzol im Forum PHPAntworten: 4Letzter Beitrag: 25.02.06, 16:30 -
Teilen eines Word-Dokumentes
Von Kolboy im Forum Office-AnwendungenAntworten: 1Letzter Beitrag: 01.05.05, 04:46 -
Teile eines Strings
Von duermer im Forum JavaAntworten: 1Letzter Beitrag: 30.10.04, 18:04 -
1. Buchstaben eines Strings
Von DaRealF1 im Forum PHPAntworten: 7Letzter Beitrag: 28.01.03, 19:10





Zitieren


Login






