String to Int

Reiskocher

Grünschnabel
So guten Abend an euch C++'ler,

ich weiß, es gab diesen Thread im Netz bestimmt schon an die 100 mal, aber ich finde keine gescheite Antwort.

Ich will einen String in ein Int-Array packen, also erster Char ausm string in z.B.: int_1[pos_1]
zweiter Char nach: int_1[pos_2] ... und ... und ... und ...

ich habe das in meinem Code so gemacht:

for (zaehler = 0; zaehler < laenge; zaehler++)
{
stringstream Str;
Str << meineEingabe[zaehler];
Str >> zahlen[zaehler];
//cout << zahlen[zaehler] << "\n";


}

(Variablen wurden weiter oben definiert)

Wenn ich die einzelnen Positionen aus dem Array ausgebe ist alles okay, die Werte stimmen, aber wenn ich dann mit einer Zahl aus dem Array rechnen will kommt ne zahl wie zB.: -877650 raus.
Die Rechnung habe ich so gestalltet:

rechnung = zahlen[zaehler] + 1;
cout << rechnung;

(die Zahl an der stelle im array war immer maximal 1-9 also 1,2,3,4 oder so (einzelne zahl). Ich habe ka wie ich das so mache, dass ich damit rechnen kann, aber ich brauche das auf jeden Fall so! Ich muss mit jeder Zahl nachher rechnen können.

Ich wäre sehr dankbar über Hilfe, auch Verbesserungsvorschläge sind erwünscht, aber ich mache C++ erst seit einem Tag, also bitte nicht so hart sein, oder sehr kompliziert (außer es geht nicht anders). Dann danke schonmal im voraus :)

lg

alex
 
Hi.
(Variablen wurden weiter oben definiert)
Schön. Und wie? Was ist denn rechnung?

Poste mal den vollständigen Code und mach am besten ein Beispiel mit Eingabe und Ausgabe.

(die Zahl an der stelle im array war immer maximal 1-9 also 1,2,3,4 oder so (einzelne zahl).
Ich gehe mal davon aus, du meinst damit das es sich bei jedem Zeichen im Array um eine Ziffer handelt?

Da du eh keine Fehlerprüfung machst, kannst du z.B. auch schnell per Hand konvertieren:
C++:
#include <algorithm>
#include <functional>
#include <cstring>
#include <iterator>
#include <iostream>

using namespace std;

int main() {
  int iarray[20];
  char cstring[] = "1234";

  transform(cstring, cstring + strlen(cstring), iarray, bind2nd(minus<char>(), '0'));
  
  copy(iarray, iarray + strlen(cstring), ostream_iterator<int>(cout, "\n"));
}
Gruß
 
also ich schreibe mal meinen ganzen Code hier rein... ist ja eh nichts besonderes, also brauche ich meine Angst haben :p

#include "stdafx.h"
#include <iostream>
#include <string>
#include <math.h>
#include <sstream>

using namespace std;

void main()
{
//Variablen :
string meineEingabe;
int laenge;
int zaehler;
int rechnung;
int zahlen[100];
int a = 1;
int b = 0;

// Eingabe in Variable "eingabe" speichern:
cin >> meineEingabe;
// Länge der Eingabe prüfen und abspeichern:
laenge = meineEingabe.length();
// Zeichen in einzelne Ziffern umwandeln:
for (zaehler = 0; zaehler < laenge; zaehler++)
{
//Chars in Int umwandeln (liegt hier ein Fehler?)
stringstream Str;
Str << meineEingabe[zaehler];
Str >> zahlen[zaehler];
//cout << zahlen[zaehler] << "\n";

//Ein Element aus dem Array != 1 oder != 0
if (zahlen[zaehler] != 1 || zahlen[zaehler] != 0)
{
cout << "fehler";
break;
}

}
//test, ob wirklich in Int konvertiert wurde
rechnung = zahlen[zaehler] + 1;
cout << rechnung;
}

Verbesserungsschläge sind natürlich erwünscht und Fehler bitte sofort ansprechen.

Danke deepthroat, für deine Hilfe, aber kannst du das vll auch erklären? Wie gesagt, ich bin erst seit 1-2 tagen an C++ .

Danke nochmals,

Alex

P.S.: Wie machst du Cpp-Code hier im Forum? ^^

EDIT2: Ich brauche jede einzelne Ziffer aus dem String in einem Int-Array, aber das sollte man denke ich mal ganz gut erkennen...^^
 
Zuletzt bearbeitet:
C++:
#include <math.h>
=>
C++:
#include <cmath>

Was deepthroads code im Prinzip macht, ist
(1)
C++:
std::transform(cstring, cstring + std::strlen(cstring), iarray, std::bind2nd(std::minus<char>(), '0'));
=> Alle Elemente der Variable cstring durchgehen (also cstring + std::strlen(cstring)), die bearbeiten, in dem Fall von jedem '0' abziehen, und das Ergebnis jeweils in iarray packen.
(2)
C++:
 std::copy(iarray, iarray + std::strlen(cstring), std::ostream_iterator<int>(std::cout, "\n"));
=> Inhalt von iarray (durch '\n' getrennt) ausgeben.

Da '0', '1', ..., '9' im ASCII-Zeichensatz nacheinander kommen, erhälst du durch abziehen des Anfangswerts '0' den korrekten Integer-Wert. Zu beachten das du vllt. http://www.cppreference.com/stdstring/isdigit.html std::isdigit aufrufen solltest, um zu testen ob deine Eingabe wirklich nur Zahlen enthält:

C++:
char alpha_array[100];
std::cin >> alpha_array;

int numeric_array[100];
for (unsigned int i(0); i < std::strlen(alpha_array); ++i)
    numeric_array[i] = alpha_array[i] - '0';
soweit entspricht das dem Code von deepthroad ...

würde aber noch folgendes einbauen:
C++:
int* ptr_first = iarray;
int* ptr_last = iarray + std::strlen(carray);

if (std::find_if(ptr_first , ptr_last, std::not(std::ptr_fun(std::isdigit)) != ptr_last) return false;
 

Neue Beiträge

Zurück