Computerhilfen.de Logo
Forum
Tipps
News
Frage stellen

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Nein, mit strtok() lässt sich das nicht unterscheiden. Da musst du dir wohl was besseres einfallen lassen...

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
/* 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.


 

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

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. 

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

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 :-(


 

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

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... 
« Letzte Änderung: 06.06.08, 10:51:12 von Lisaa »

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

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);

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

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-Pascalmehrdimensionale arrays in C++ »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Quellcode
Ein Quellcode, auch als Quelltext bekannt, bezeichnet den unkompilierten Programm-Code einer Software. Quell- oder Programm-Code ist der auch für Menschen lesbare Co...

Unicode
Unicode ist ein international anerkannter Standard, der als universeller Zeichencode ("Universal Code") dient und durch das Unicode-Konsortium entwickelt und verwaltet wi...

QR-Code
QR-Codes, die Abkürzung für "Quick Response Codes", sind eine Form von zweidimensionalen Barcodes. Damit lassen sich Informationen schnell und effizient speiche...