Nein, mit strtok() lässt sich das nicht unterscheiden. Da musst du dir wohl was besseres einfallen lassen...
/* isdigit example */
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main ()
{
char str[150]="3+4+(9-4)*9";
int year;
int i;
for(i=0;i<150;i++)
{
if (isdigit(str[i]))
{
year = atoi (str[i]);
printf ("The year that followed %d was %d.\n",year,year+1);
}
}
system("pause");
return 0;
}
damit wollt eich eignetlich unterscheiden ob es sich um eine zahl oder um ein anderes zeichen handelt.
aber das geht leider auch nicht so.
OK, da gibt es zwei Möglichkeiten:
year = (int) str[i] - '0';
oder mit atoi:char c[2] = { 0 };
for...
if...
c[0] = str[i];
year = atoi( c );
Das Problem ist nämlich, dass du nur ein Zeichen wandeln willst. D.h. du musst entweder nach int casten oder eine Zeichenkette draus machen und mit atoi wandeln.
Okay...
also ich wollte jedes Zeichen überprüfen. wennn es eine Zahl ist soll es erstmal in eine Variable kopiert werden.
Wenn das nächste Zeichen einen Zahl ist soll diese an die letzte Variable angehängt werden. Solange bis da keine Zahl steht. Dann soll die Variable aus den Zahlen in Integer umgewnadelt werden.
Beispiel:
102+32
....
int a0=102
int a1=32
irgendwie glaube ich das dass auch ncoh zu kompliziert für mich ist :-(
Das geht tatsächlich einfacher, atoi() kann das für dich erledigen:
for( i=0; i<150; i++ ) {
if( isdigit( str[i] ) ) {
year = atoi( &str[i] );
printf ( "The year that followed %d was %d.\n", year, year+1 );
}
}
Durch das &str gibst du einen char* in die Funktion, der auf den String, der beim i-ten Zeichen beginnt, zeigt. atoi() wird die Zahl die dort *beginnt* nach int wandeln, nicht nur das eine Zeichen. Du musst allerdings dann aufpassen, dass du den Rest der Zahl überspringst, d.h. wenn dort 123 steht, würde jetzt
123
23
3
rauskommen, weil unabhängig von der tatsächlichen Länge der Zahl nur ein Zeichen weitergezählt wird.
Ich hoffe das war jetzt halbwegs verständlich...
Also müsste ich die Zahlumwandeln lassen dann die Länger über strlen() auslesen und die Länge dann dazuzählen.?
Also
i=i+strlen(year);
Aber year ist ja eine Integer-Variable...kann ich das nicht für die Zwecke casten?
i=i+strlen((char)year);
Zum Beispiel, ja. Du kannst das aber nicht einfach casten, weil es ja kein einzelnes Zeichen ist, sondern ein String. Und selbst wenn, hast du wieder das Problem, dass strlen eine Zeichenkette haben möchte und du dann aber nur ein Zeichen reinsteckst...
Du könntest natürlich die Zahl zurückwandeln:
char zahl[12];
...
...
sprintf( zahl, "%d", year );
i += strlen( zahl ) - 1;
Das -1 ist als Ausgleich für das i++ in der Schleife gedacht. Damit du nicht zu weit zählst.
« Dezimal in römische Zahlen mit Turbo oder Dev-Pascal | mehrdimensionale arrays in C++ » | ||