Nur Bestimmte arrays eines Strings abfragen

… unter C

Mahlzeit,
Ich habe folgendes Problem, ich will unter C einen String abfragen, allerdings will ich nicht sofort den ganzen String verwenden sonder ihn stück für stück abarbeiten.
nun folgendes: ich habe

„char byear[10]“

definiert, ich will also 9 zeichen abfragen (+ die binäre 0). allerdings brauche ich zu anfang nur die hinteren 4 stellen des Strings, also alle zeichen von

„byear[5]“ bis „byear[9]“

allerdings weis ich nicht wie ich das anstellen soll.

google ist diesbezüglich auch recht nutzlos gewesen.

bitte helft mir

gruß tim

Ps.: ich lerne C seit ca 3 Wochen also seit bitte zärtlich, danke!

verstehe das nicht ganz. du willst einen neuen array der nur die 5 werte enthält? wieso dann erst in 10er arrays splitten?

ansonsten via referenz:

char* foo;
int i;
foo = &byear[5];
for(i=0; i

ich frage mit „byear“ ein datum ab, dafür brauche ich 10 werte, als erstes wird durch abziehen des jahres (letzte 4 werte) vom aktuellen jahr das alter bestimmt

und dann durch die anderen beiden werte, nämlich „byear[0]“ - „byear[1]“ und „byear[3]“ - „byear[4]“ („byear[2]“ ist ja ein punkt 00.00.0000) bestimmt, ob das datum bereits abgelaufen ist oder nicht um dann -1 zu rechnen.

das tool soll quasi durch eingabe eines Geburtsdatums das alter errechnen.

wo ich übrigens bei einer weiteren frage bin, dein script ist ja eine schleife der einfach ab [5] durchläuft, wie mach ich das wenn ich jetzt die ersten beiden und die 3. und 4. zeichen haben will?

Hallo,
dazu gibt es die „wenn“ Abfragemöglichkeit.
Also:

if (byear[5] == ‚d‘ && byear[6] == ‚s‘ && byear[7] == ‚t‘)
// && steht für „und“-Verknüpfung
{
// tue etwas …
}

Gruß
jensk

es fängt beim 5. eintrag an und hört beim 9. auf.
den letzten lasse ich weg, da du ja, wie du behauptest eine string terminierung drin hast.

du willst also foo[0],foo[1],foo[3] und foo[4] haben?

dazu muss ich wissen wie du es speichern magst? wieder in ein array?

Moin,

bin etwas aus der Übung was C angeht, sollte aber noch gehen:

char byear[10];
char* sub = byear +5;
setzt einen Pointer auf die 5. Stelle (con 9 gezählt) auf deinen String. damit zeigt der auf die letzten 4 Zeichen.

Alternativ kannst du auch den Inhalt kopieren:
char byear[10];
char sub[5];
strcnpy(sub, byear +5, 4);
kopiert bis zu 4 Zeichen von byear nach sub, ab dem 5. Byte.

Viel Erfolg

da ich damit eine einfache rechnung durchführen wollte (ohne komma oder sonst irgendwas) dachte ich an einen int wert also atoi

Das jahr enthält selbst auch noch ein zeichen? einfacher wäre es wenn du mal den kompletten array zeigst.

da ich damit eine einfache rechnung durchführen wollte (ohne
komma oder sonst irgendwas) dachte ich an einen int wert also
atoi

so hier ist einfach mal der quellcode des Tools. ich habe soweit den lösungsansatz die zeichen zu einem neuen string zusammen zu kopieren verwendet.
allerdings bekomme ich anstatt einer jahreszahl (zb. 1995 bei der eingabe 11.03.1995) einfach nur eine 0.

ich kann meinen fehler einfach nicht finden.

http://paste2.org/p/1589387

Ps.: auf paste2.org weils schöner aussieht.

Greife doch auf denString mit „&byear[5]“ zu, dann hast du doch die letzten vier zeichen.

Also so ganz habe ich das bisher noch nicht verstanden…willst du etwa herausfinden, wie lang der string ist, dann die letzten 4 zeichen nehmen und dann den vorderen Teil abfragen? Das würde mit dem Befehl length(byear) gehen, der dann einem integer zugeordnet wird (wobei ich nicht genau weiß, ob der auch in C so existiert und unter umständen anders heißt) und danach ziehst du davon !!!5!!! ab, weil die erste stelle ja die nullte stelle ist.

// kopieren ginge so
char target[5];
strcpy(target, byear+5);

//schleife
int i=5;
while (byear[i]!=0)
{
// was auch immer
i++;
}

Hilfe: http://www.cplusplus.com

http://paste2.org/p/1589763

achsooo, sehe nun meinen fehler, danke für die mühe

gruß
tim