String Lücken füllen
-
Hey Leute!
Ich habe morgen Test und habe eine super Übung dafür, habe aber noch nicht begonnen, weil ich wirklich fast keine ahnung hab.
Also:
Ich gebe einen String ein zB.: FKS-82I2-KO
Überall wo ein Bindestrich ist, soll es weitergeführt werden. Also beim ersten Teil steht FKS und es soll nach dem Alphabet weiter gehen, also nach dem S gehts weiter. FKSTUVWXYZ, also bis Z. Zahlen sollen bist 9 weiter geführt werden.Meine Idee:
Ich muss mal S erkennen. Also S - '\0' dann hab ich den Wert von S. Dann das Erg +1 in einer Schleife? Und am Ende wieder + '\0' damit ich wieder den Buchstaben hab? Mit den Zahlen das selbe. 8 - '\0' und dann Erg + 1 dann hab ich die 9?Wie ich auf die binäre 0 komme? Unser Lehrer hat uns den Tipp gegebn "binäre Null" hat er gesagt
Bitte ausführlich erklären ich bin ein Anfänger (:
Gruß
c.nub
-
c.nub schrieb:
Meine Idee:
Ich muss mal S erkennen. Also S - '\0' dann hab ich den Wert von S. Dann das Erg +1 in einer Schleife? Und am Ende wieder + '\0' damit ich wieder den Buchstaben hab? Mit den Zahlen das selbe. 8 - '\0' und dann Erg + 1 dann hab ich die 9?naja, erstmal musste das '-' erkennen, dann das zeichen davor nehmen, hochzählen, ausgeben, hochzählen usw, bis '9', 'z' oder 'Z' ausgegeben wurde. danach gehts weiter im source-string.
c.nub schrieb:
Wie ich auf die binäre 0 komme? Unser Lehrer hat uns den Tipp gegebn "binäre Null" hat er gesagt
da hat er auch recht, einfach eine normale 0 (alle bits sind 0), also weder '\0', noch NULL, noch sonst irgendwas seltsames.
-
Also nicht '\0' sondern nur 0?
Und wie zähle ich hoch? So wie ich gesagt hab? Nur mit 0 oder wie??btw, warum meldest du dich net in dem Forum an?^^ Oder kann man nur dein Profil net besuchen?
Danke schonmal.
-
c.nub schrieb:
Und wie zähle ich hoch? So wie ich gesagt hab? Nur mit 0 oder wie??
angenommen du findeset ein 'p' vor dem '-', dann rechnest du einfach 'p'+1 und erhältst ein 'q'. das ist zwar nicht standdardkonform, aber sollte bei dir (wie fast überall) gehen. ebenso mit ziffern, also '7'+1 = '8'. ach ja, das hochzählen von ziffern funzt auch laut c-standard.
c.nub schrieb:
btw, warum meldest du dich net in dem Forum an?
warum sollte ich?
-
Okay danke, habe in der Zwischenzeit mal das geschrieben:
#include <stdio.h> #include <conio.h> #include <string.h> void main (void) { char eingabe[100], ausgabe[100]; int erg, i; erg = 0; i = 0; gets(eingabe); while (eingabe != '\0') { if (eingabe[i] == '-') { i--; erg = eingabe[i] - '\0'; erg = erg + 1; i++; eingabe[i] = erg + '\0'; } i++; } printf("%s", eingabe); getch(); }
Bei mir kommt aber ne Fehlermeldung:
Unbehandelte Ausnahme bei 0x00af131f in bis zum ende erweitern.exe:
.....
Ich kann auf Unterbrechen und Weiter klickenAber es wird ja ein BreakPoint gesetzt und unten stehen dann die Werte!!
Also wenn ich abc-123 eingebe dann steht dort unten abcd123 für die Variable Eingabe.
Für i steht 516.Warum du solltest? kA dann bist du cool
Ne du investierst hier voll viel Zeit rein denk ich mal, du könntest Admin oderso werden hehe^^
-
So habe den Teil im if geändert, es kommt aber das gleich
Weiss jmd ne Lösung dazu??if (eingabe[i] == '-') { i--; c = eingabe[i] - '\0'; // c ist ein einzelner char i++; eingabe[i] = c + 1; // wenn ich noch eingabe[i] = eingabe[i] + '\0' mache kommt die selbe Fehlermeldung aber i hat einen etwas höheren Wert... um ein paar Hundert. }
Ich komm echt net weiter.
-
Und jz hab ich wieder etwas neues, iwie klappt es garnicht, ich seh den Fehler nicht Leute pls ich brauch dringend Hilfe, morgen ist Test
#include <stdio.h> #include <conio.h> #include <string.h> void main (void) { char eingabe[100], ausgabe[100],c; int erg, i; i = 0; gets(eingabe); while (eingabe != '\0') { if (eingabe[i] == '-') { i--; erg = i + 1; ausgabe[erg] = eingabe[i] + 1; i++; } i++; } printf("%s", ausgabe); getch(); }
*edit* Es wird nix ausgegebn, die Konsole bleibt leer und nichts passiert.
Gruß
c.nub
-
Ich will ja, wenn es ein Buchstabe ist, dass es bis Z geht, und bei Zahlen bis 9... Es geht aber immer weiter. Wie kann ich machen, dass er bei Z und bei 9 aufhört?
-
while (eingabe != '\0') tut nicht was du willst.
eingabe ist ein pointer und der ist immer ungleich 0 in deinem Fall.
Was du eigentlich willst ist
while (eingabe[i] != '\0'), denn eingabe[i] ist ein char.Wenn eingabe[i] != '-' ist, dann zählst du nur i hoch. Du musst aber noch eingabe[i] nach ausgabe[i+erg] kopieren.
Innerhalb deiner while-schleife musst du sowas wie das hier schreiben:
while (ausgabe[erg]<='9' && ausgabe[erg]<='Z' && ausgabe[erg]<='z'){ //solange kein Ende da ist ausgabe[erg+1] = ausgabe[erg]+1; //nächstes Zeichen ist das Zeichen vorher +1 erg++; }
Du solltest dir das Debuggen angewöhnen, zum Beispiel kannst du mal testweise in die while-Schleife ein
printf("Eingabe: %s, Ausgabe: %s, aktuelles Zeichen: %c\n", eingabe, ausgabe, eingabe[i]);
setzen. Dann siehst du wie die Ausgabe Schritt für Schritt zusammengebaut wird und eventuell findest du dann die Stelle die nicht funktioniert.
@;fricky: Weil ich sonst ganz viel Blödsinn in deinem Namen hier reinschreibe
-
c.nub schrieb:
Warum du solltest? kA dann bist du cool
bin ich auch, hihi.
c.nub schrieb:
Ne du investierst hier voll viel Zeit rein denk ich mal, du könntest Admin oderso werden hehe^^
das mach ich nebenbei, wenn ich sowieso vor der pc-kiste sitze.
admin? *ggg* du meinst wohl ehrenamtlicher handlanger zum löschen von spam-posts. nein, danke.nwp2 schrieb:
@;fricky: Weil ich sonst ganz viel Blödsinn in deinem Namen hier reinschreibe
mach doch, dann suche ich mir 'nen anderen namen aus.
@c-nub, probier dies, aber nicht einfach abschreiben, falls es tun sollte, was du willst:
void count_me_up (char *in, char *out) { char *p = in; for (;*in;in++) { if (*in == '-') { char c = *(out-1); if (p != in) // ignore leading '-' if (isalnum(c)) // no special chars while (c != '9' && c != 'z' && c != 'Z') *out++ = ++c; } else *out++ = *in; } *out = 0; } // test int main(void) { char *in = "-r-2-z-9-G-4-"; char out[1024]; count_me_up (in, out); puts (in); puts (out); }
-
Ich kanns einfach net -.-
[/cpp]#include <stdio.h>
#include <conio.h>
#include <string.h>void main (void)
{
char eingabe[100], ausgabe[100],c;
int erg, i,z;
z=0;
i = 0;
erg = 0;
gets(eingabe);
while (eingabe[z] != '\0')
{
printf("1%s\n", eingabe);
while (eingabe[z] <= '9' || eingabe[z] <= 'z' || eingabe[z] <= 'Z')
{
printf("2%s\n", eingabe);
if (eingabe[z] == '-')
{
printf("3%s\n", eingabe);eingabe[z++] = eingabe[z] + 1;
printf("4%s\n", eingabe);
}
z++;
}
z++;}
printf("%s", eingabe);
getch();}[cpp]
Cya.