2017-11-03 4 views
0

Dies ist mein erstes Mal mit Zeigern, weshalb meine Logik wahrscheinlich sehr fehlerhaft ist. Ich schreibe ein Programm, das Zahlen in einer Zeichenfolge mit atoi() zusammenfasst. Zum Beispiel sumNumbers ("1 2 b asdsd 3 4) mein Programm sein sollte 10. Hier ist,Summe der ganzen Zahlen in einem String C

int sumString(char string[]) { 
    char *ptr=string; 
    int index = 0; 
    int len = strlen(string); 
    int sum = 0; 
    while(index < len) { 
     while (ptr[0] == ' ') { 
      ptr++; 
      index++; 
      if (index == len) { 
       return sum; 
      } 
     } 
     while (atoi(ptr) == 0) { 
      ptr++; 
      index++; 
      if (index == len) { 
       return sum; 
      } 
     } 
     if (atoi(ptr) != 0) { 
      sum += atoi(ptr); 
      ptr++; 
      index++; 
      while (ptr[0] != ' ' || atoi(ptr) != 0 || ptr[0] == '\0') { 
       ptr++; 
       index++; 
      } 
     } 
    } 
    return sum; 
} 

Meine erste Bedingung aller weißen Flecken loswerden sollte, meine zweite sollte laufen für alle Buchstaben halten, und meine dritte sollte den Wert von atoi addieren, bis zu einem Leerzeichen oder einem Buchstaben weitergehen, und dann sollte die Schleife erneut durchlaufen werden und die ersten beiden Bedingungen ihre Aufgaben erneut ausführen.Dies funktioniert leider in den meisten Fällen, außer wenn ich einen Buchstaben anklebe eine Zahl wie "18b5". Dies sollte 23 zurückgeben, aber es gibt 18 zurück.

+0

(https://stackoverflow.com/q/17710018/995714) –

+0

[? Sie nicht() verwenden atoi] Was meinen Sie? Du benutzt es. – DrJessop

+0

hast du den Link gelesen? Ich habe nicht gesagt, dass ich es verwende –

Antwort

0

Die letzte Schleife sollte geändert werden:

 while (ptr[0] != '\0' && atoi(ptr) != 0) { 
      ptr++; 
      index++; 
     } 
0

Anscheinend war mein ein Problem, dass meine letzte Weile-Schleife & & anstelle von || zwischen haben sollte die ersten beiden Aussagen.

+0

Ich bin ziemlich überrascht, dass dies tatsächlich funktioniert, der Fall für die Behandlung einer Ganzzahl (while (ptr [0]! = '' || atoi (ptr)! = 0 || ptr [0] == '\ 0')) scheint ein wenig zweifelhaft zu mir. EDIT: oh richtig das ist, was Sie gerade gesagt –

+0

welche Ausgabe sollte erwarten, wenn die Zeichenfolge "1234" ist? sollte 10 richtig sein? –

+0

Nein, die Ausgabe sollte in diesem Fall 1234 sein. – DrJessop

Verwandte Themen