Wie bekomme ich den Wert aus einem String in einen Int



  • Ich habe ein riesen Problem!

    Ich habe einen String z.B --> (1,23,5)
    Nun muss ich die einzelnen Zahlen in den Klammer in einen int zwischenspeichern!
    Es muss kein Int sein, ich muss nur die komplette Zahl haben!

    Solange die Zahlen in den Klammer einstellig sind bekomme ich das auch hin, aber sobald 2 oder mehr Stellen, dann komme ich nicht weiter!!

    Kann mir da einer helfen?????

    Ansatz:

    for(i=(Anfang Zahlen im String);i < strlen(String);i++)
    if (String[i] != ','){
    
         WIE KANN ICH DAS MACHEN
    }
    


  • du könntest es z.b. mit strtok zerhacken und dann mit sscanf, strtoul, atoi oder sowas zu zahlen machen.
    🙂



  • Hi,

    ich hätte es so ähnlich gemacht:

    #define MAX_BUFFER 256
    
    #include <stdio.h>
    #include <string.h>
    
    int main() {
    	const char *input = "\t\t1, 2, 3, 4, 55, 12, 123451234234348374823, 123123\t,1 23128371283, 123123, 000000123\n"; // \n dient als Abschlusszeichen
    	char buffer[MAX_BUFFER];
    	int i = 0, j = 0, inputlen = strlen(input);
    	for (; i < inputlen; ++i) {
    		while (input[i] == ' ' || input[i] == '\t') { /* Nur falls du auch Leerzeichen, Tabs raus haben willst! */
    			i++;
    		}
    		if (isdigit(input[i])) {
    			buffer[j++] = input[i];
    		} else {
    			buffer[j] = '\0';
    			j = 0;
    			printf("Int: %i\n", atoi(buffer)); // Nach int umwandeln...
    			memset(buffer, 0, MAX_BUFFER);
    		}
    	}
    	return 0;
    }
    

    Ich hoffe es hilft dir weiter... Um die Klammern musst du dich jedenfalls, falls die eine wichtige Bedeutung haben, noch selbst kümmern 🙂

    Viele Grüße,
    Patrick



  • hatte etwas langeweile und hab deinen code etwas vereinfacht (hoffentlich) und in eine funktion ausgelagert.

    #include <stdio.h>
    #include <ctype.h>
    
    void numbers (char *in)
    {
       char s[256];
       char *p = s;
    
       for (;;in++)
       {
          if (isdigit(*in))
             *p++ = *in;
          else if (p != s)
          {
             *p = 0;
             puts (s);     // <-- statt puts hier umwandeln in int oder sowas
             if (*in == 0)
                return;
             p = s;
          }
       }
    }
    
    int main ()
    {
       char *input = "\t\t1, 2, 3, 4, 55, 12, 123451234234348374823, 123123\t,1 23128371283, 123123, 000000123";
       numbers (input);
    }
    

    🙂



  • hi patrick schrieb:

    hatte etwas langeweile und hab deinen code etwas vereinfacht (hoffentlich) und in eine funktion ausgelagert.

    #include <stdio.h>
    #include <ctype.h>
    
    void numbers (char *in)
    {
       char s[256];
       char *p = s;
    
       for (;;in++)
       {
          if (isdigit(*in))
             *p++ = *in;
          else if (p != s)
          {
             *p = 0;
             puts (s);     // <-- statt puts hier umwandeln in int oder sowas
             if (*in == 0)
                return;
             p = s;
          }
       }
    }
    
    int main ()
    {
       char *input = "\t\t1, 2, 3, 4, 55, 12, 123451234234348374823, 123123\t,1 23128371283, 123123, 000000123";
       numbers (input);
    }
    

    🙂

    Vereinfachung ist relativ 🙂 Kommt drauf an, ob er sich mit Zeigern etc... auskennt 🙂 Aufjedenfall sollte er mit den beiden wohlbemerkten kompletten Beispielen in der Lage sein weiterzuarbeiten 🙂

    Viele Grüße,
    Patrick


Anmelden zum Antworten