Teil-String in einem Array in ein neues Array schreiben
-
Hallo Leute!!
Ich bin zwar jemand der seine Probleme selber versucht zu lösen, aber ich komme leider nicht mehr weiter:
Bin erst seit kurzem mit C zugange und schlage mich derweil mit folgendem Problem rum.Ich habe drei char-Arrays char eingabe [500], char abschnitt [50] und char ausgabe [11].
In das erste wird per fgets eine Zeichenfolge eingelesen, die man eintippt.
Dann sollen die ersten 10 Elemente von eingabe [500] in ausgabe [11] kopiert werden. Das funktioniert auch wie es soll.Nun möchte ich jedoch alle weiteren Element (also ab 10) von eingabe [500] in abschnitt [50] kopieren. Und das bekomm ich nicht hin.
Hier der erste kopiervorgang von eingabe --> ausgabe, welcher funktioniert:
for (i=0; i<10; i++)
{
ausgabe[i] = eingabe[i];
}Der zweite, also eingabe --> abschnitt, ab dem 11 Feld funktioniert nicht:
for (i=10; i<=49; i++);
{
abschnitt[i] = eingabe[i];
}Wenn ich mir abschnitt über printf ausgeben lasse kommt da nichts raus -.-
Was mache ich falsch? Kann mir einer helfen?Vielen Dank!
-
Deine Schleife am besten direkt über 60 Elemente laufen lassen.
Wenn der Iterator < 10 ist schreibst du den Wert in das eine Array ansonsten in das andere.for (i=0; i<60; i++) { if(i < 10) ausgabe[i] = eingabe[i]; else abschnitt[i-10] = eingabe[i] }
Du solltest über die Größen deiner Arrays nochmal nachdenken, wenn du wirklich jedes mal 10 / 50 Zeichen kopieren möchtest. - Dann brauchst du z.B. kein Array, das 11 Elemente annimmt für 10 Zeichen.
-
Du meinst wohl
for (i=10; i<=49; i++); { abschnitt[i-10] = eingabe[i]; }
Bedenke aber, daß du die char-Arrays mit Null (0 bzw. '\0') abschließen solltest, sofern du sie als C-Strings behandeln möchtest (z.B. für die Ausgabe mittels printf)!
P.S. Und schau dir auch mal die Funktionen memcpy bzw. strcpy an...
-
Hi!!
Super vielen Dank für schnelle Meldung! Und das funktioniert sogar
Die Arrays habe ich einfach random gewählt gehabt, wichtig war hierbei, dass nur eine bestimmte Anzahl, hier waren es 10 Element in das erste Array (eingabe) kommen und der Rest in das andere (abschnitt). Ist aus einer Übungsuafgabe, die ich mache, daher die Nachfrage.
inflames2k schrieb:
Deine Schleife am besten direkt über 60 Elemente laufen lassen.
Wenn der Iterator < 10 ist schreibst du den Wert in das eine Array ansonsten in das andere.for (i=0; i<60; i++) { if(i < 10) ausgabe[i] = eingabe[i]; else abschnitt[i-10] = eingabe[i] }
Du solltest über die Größen deiner Arrays nochmal nachdenken, wenn du wirklich jedes mal 10 / 50 Zeichen kopieren möchtest. - Dann brauchst du z.B. kein Array, das 12 Elemente annimmt für 10 Zeichen.
-
Th69 schrieb:
Du meinst wohl
for (i=10; i<=49; i++); { abschnitt[i-10] = eingabe[i]; }
Bedenke aber, daß du die char-Arrays mit Null (0 bzw. '\0') abschließen solltest, sofern du sie als C-Strings behandeln möchtest (z.B. für die Ausgabe mittels printf)!
P.S. Und schau dir auch mal die Funktionen memcpy bzw. strcpy an...
Ja ich möchte Sie als C-Strings behandeln. Wo bzw wie schließe ich denn meine Strings am besten ab?
Die funktionen darf ich leider nicht benutzen
-
Hallo, für das Abschließen brauchst du dann das 11. Zeichen hinter den 10 kopierten.
ausgabe[10] = '\0';
-
Hallo Zusammen:
ich bin zwar ein ganzes Stück weiter gekommen, hänge nun aber schon wieder am nächsten Problem:
1.) Und zwar möchte ich den eingegebenen und den abgeschnittenen String zählen, der Compiler gibt mir jedoch immer beim Eingegebenen String eine Nummer zu hoch aus. (Wenn ich also "Hallo" eingebe, gibt er mir zurück dass ich 6 Buchstaben eingegeben habe.2. Ich möchte im Array "eingabe" die Anzahl der Zahlen und Großbuchstaben ausgeben und bin auf diese Befehle gestoßen:
if(isdigit(eingabe[i])) ziffern++;
if(isupper(eingabe[i])) letter++;Kann mir eventuell einer verraten wo ich diese Befehle einbauen muss? Ich habe es schon einmal hinbekommen, allerdings beim nächsten Durchlauf funktionierte es nicht mehr
Vielen Dank nochmal für eure Hilfe!
Hier noch einmal mein Quelltext in kompletter Form:
#include <stdio.h> #include <ctype.h> #include <stdlib.h> #define CRT_SECURE_NO_WARNINGS char eingabe[60]; char abschnitt[50]; char ausgabe[11]; int main() { do { printf("\nBitte geben Sie eine Zeichenfolge ein:"); fgets(eingabe,60,stdin); int letter=0; int ziffern=0; int len=0; int z,i=0; int len2=0; for (i=0; i<60; i++) { if (i<10) ausgabe[i] = eingabe[i]; else abschnitt[i-10] = eingabe [i]; }ausgabe[10] = '\0'; for(z=0, len2=0; abschnitt[len2]; i++, len2++); for(z=0, len=0; eingabe[len]; i++, len++); if(isdigit(eingabe[i])) ziffern++; if(isupper(eingabe[i])) letter++; printf("Der gespeicherte String ist: %s\n", ausgabe); printf("Die eingegebene Folge hat %d Zeichen", len); printf("\nFolgende Zeichen wurden abgeschnitten: %d\n", len2); printf("\nDie Folge enthaelt %d Ziffern und %d Grossbuchstaben.\n", ziffern, letter); } while (1); return 0; }
-
Debugge einfach mal dein Programm und schau dir an welchen Wert die Variable 'i' bei deiner Abfrage hat...
P.S. Und selbst wenn du die beiden Funktionen (sowie strlen) nicht benutzen darfst, so macht es dann doch mehr Sinn, diese einfach selber zu schreiben und zu benutzen - anstatt händisch mit den Schleifen (wodurch du solche Fehler eben provozierst).
-
Vielen Dank für den Tipp "TH69", das habe ich nun auch gemacht und weiss nun auch wie der Debugger zu handhaben ist
Und nun habe ich auch meine Aufgabe erfolgreich bearbeiten können.
Danke auch nochmal an alle anderen, die geantwortet haben, habe einiges gelernt
Gruß!!