folgendes beispiel ist nicht ganz einfach zu verstehen, zeigt aber, wie man mit zeichenketten, zeigern (und atoi) arbeitet. es werden zahlen aus einer zeichenkette extrahiert und addiert. am ende wird das ergebnis (integer) wieder in eine zeichenkette gewandelt.
mit char *p wird der zeiger deklariert. später (das ist bissl verwirrend) ist *p aber der char-wert, auf den p gerade zeigt. p wandert hier (mit p++) durch die zeichenkette "array", bis er auf die 0 am ende der zeichenkette stösst.
Code:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i=0,summe=0;
char array[]="Ein String mit der Zahl 123 und der Zahl 456 drin";
char buffer[8];
char *p; // ein char-zeiger
p=array; // der zeiger zeigt nun auf erstes element von array
printf("untersuche zeichenkette: %s\n",array);
while(*p) // wiederhole bis der wert des char´s, auf den p zeigt = 0 ist (dort endet der string)
{
if(*p>47&&*p<58) // wenn dieser wert eine ziffer ist (0-9)
{
buffer[i++]=*p; // dann füge sie dem array 'buffer' zu
}
else if(i>0) // andernfalls (wenn i>0 ist, wurden bereits ziffern gefunden, das aktuelle zeichen ist aber keine zahl mehr)
{
buffer[i]=0; // 0-terminieren
printf("zahl gefunden: %s\n",buffer); // die ascii-zeichen der zahl liegen nun in buffer
summe+=atoi(buffer); // in integer (ganzzahl-wert) wandeln und zu "summe" addieren
i=0; // weiter geht die Suche nach weiteren zahlen
}
p++; // den zeiger in "array" weiterbewegen
}
printf("summe der zahlen: %d\n",summe);
itoa(summe,buffer,10);
printf("summe als zeichenkette: %s\n",buffer);
return 0;
}
buffer ist hier mit 8 zeichen sehr klein, und es wurden keine "sicherheitsmassnahmen" eingebaut. in der praxis müsste man unbedingt darauf achten, dass nicht über das ende von buffer hinausgeschrieben werden kann.
ich kann dir (wie izaseba bereits) nur empfehlen, solche fingerübungen am pc zu machen, die fehlersuche gestaltet sich dann viel einfacher.
gruesse
Lesezeichen