Pointer Char in Int umwandeln
-
Hallo zusammen.
Ich bin neu hier und habe ein Problem, an dem ich mir jetzt schon 2 Stunden den Kopf zerbreche. In der Suche habe ich leider nichts passendes gefunden.
Also ich habe eine Funktion die zwei Vektoren multipliziert.
void vecmult(char *a, char *b, laenge) { int i; res = 0; for (i = 0; i < laenge; i++) { res += (*(a+i) * *(b+i)); } }
a und b zeigen jeweils auf das erste Element eines Arrays. Die Arrays werden per Standardeingabe gefüllt, sprich sind Strings.
Jetzt besteht aber das Problem, dass die Funktion so wie sie ist natürlich nur den ASCII-Wert auswertet.
Wie bekomme ich jetzt*(a+i)
in einen Integerwert umgewandelt?
Ich weiß es ist unschön, aber es soll mit Pointern gelöst werden.
Das ganze Programm sieht aktuell so aus:
#include <stdio.h> #include <stdlib.h> int res; void vecmult(char *a, char *b, int z) { int i; res = 0; for (i = 0; i < laenge; i++) { res += (*(a+i) * *(b+i)); } } int main() { char va[10], vb[10]; int laenge; printf("Bitte laenge der Vektoren eingeben:\n"); scanf("%i", &lange); printf("Erster Vektor:"); scanf("%s", va); printf("Zweiter Vektor:"); scanf("%s", vb); vecmult(va, vb, laenge); printf("Ergebnis: %d", res); return 0; }
Vielen Dank schonmal
-
Du kannst von der Ziffer (die ja in dem String steht) die '0' abziehen. (achte auf die '')
res += ((*(a+i)-'0') * (*(b+i)-'0'));
Ich frage jetzt mal nicht, welchen Zweck das hat.
Die Länge solltest du besser vom Rechner ermitteln lassen.
Zudem solltest du bei der Eingabe eine Längenbeschränkung mit angeben.
char va[10], vb[10]; ... printf("Erster Vektor:"); scanf("%9s", va); /* Die 9 resultiert aus der 10 von va[10] */
-
Super, vielen Dank.
Klappt wunderbar. Ich hatte mich total auf eine Umwandlung versteift.
Mit nem cast oder atoi ging das dann natürlich nichtUm ehrlich zu sein, hat das Programm eigentlich nur den Sinn mit Pointern vertrauter zu werden.