Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
23.02.10, 14:15
|
#1
|
Anfänger
Registriert seit: Feb 2010
Beiträge: 6
Bedankt: 0
|
C int aus char zeigervektor
Ich habe mit strtok erfolgreich ein Zeile in eine Struktur eingelesen.
Jetzt benötige ich die tokens noch für einige andere Sachen und fische mir aus den tokens noch ein paar heraus von denen ich ein paar der Infos gleich weiterverarbeite.
Da ich nicht weiss an welcher Stelle sie kommen sammle ich sie mir mit einer if Bedingung auf.
Soweit so gut. Aber mit diesem Zeiger char habe ich nur ärger.
An einer Stelle brauche ich die Zahl die an einer bestimmten Stelle kommt. Aber das Zeichen lässt sich mit atoi nicht umwandeln. Kann mir jemand helfen?
Mit dem Fehler kann ich so recht nichts anfangen.
178, 31 Type error in argument 1 to `atoi'; found 'char' expected 'pointer to const char'.
Code:
char *tokenk,*tokenv;
if (tokenk[3] == 'B')
{
while (a<=n)
{
if (atoi(tokenk[2]) == a)
SetTableCellVal(tabPanelDATA, TABDATA_TABLEDATA, MakePoint (a, 4), tokenv);
// Tabelle in CVI tut aber für den Fehler nichts zur Sache restlicher Code ist C
++a;
}
}
|
|
|
23.02.10, 18:37
|
#2
|
Newbie
Registriert seit: Jan 2009
Beiträge: 54
Bedankt: 8
|
atoi kann nur die ganze char variable umwandeln du müsstest ihn einfach in eine zweite char-variable kopieren ( denk an das abschließende \0, musst du hinzufügen) und dann müsste es eigentlich funtkionieren hatte selbst auch so ein Problem gehabt
__________________
Jeden Tag eine Gute Tat und jedem ist geholfen
|
|
|
23.02.10, 18:51
|
#3
|
Mitglied
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
|
oder (tokenk[2] - '0') == a
__________________
entropie erfordert keine wartung
|
|
|
24.02.10, 07:52
|
#4
|
Anfänger
Registriert seit: Feb 2010
Beiträge: 6
Bedankt: 0
|
Vielen Dank ich habe die Lösung von Urga gewählt. Könnte mich ärgern habe so lange an dem Problem gehangen und die Lösung ist so einfach xD
Aber jetzt hat sich ein weiteres Problem aufgetan und zwar funktioniert das ganze nicht wenn die Zahl zweistellig ist.
Das hieße die Zahl wäre ja dann von tokenk[2-3] und der Buchstabe wäre dann auf der Stelle 4.
Was kann ich da machen?
|
|
|
24.02.10, 13:55
|
#5
|
Anfänger
Registriert seit: Feb 2010
Beiträge: 6
Bedankt: 0
|
Ok ich habe selber eine Lösungh gefunden aber diese ist für meinen Geschmack einen Zacken zu kompliziert:
Code:
char *seach={"1234567890"};
int a=1;
if (memchr(seach, tokenk[3], 10) != NULL)
{
b=tokenk[4];
strncpy(c ,tokenk+2, 2 );
}
else
{
b=tokenk[3];
strncpy(c ,tokenk+2, 1);
}
c[2]=NULL;
switch(b)
{
case 'B':
while (a<=n)
{
if (atoi(c) == a)
{
SetTableCellVal(tabPanelDATA, TABDATA_TABLEDATA, MakePoint (a, 4), tokenv);
break;
}
++a;
}
... }
|
|
|
24.02.10, 19:38
|
#6
|
Mitglied
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
|
lol, viel zu kompliziert 
strtok() hat doch deine zeile in spalten zerstückelt.
angenommen die aktulle spalte steht in char* s;
und s[i] sei die erste digit.
s[i+n] der buchstabe. n unbekannt.
Code:
int findNonDigit (char *s, int i) {
while (isdigit(s[i])) i++;
if (s[i] == '\0') {
printf ("hier stimmt was nicht!\n");
exit (-1);
}
return i;
}
....
....
int n = findNonDigit (s, i);
char c = s[i+n];
s[i+n] = '\0';
int zahl = atoi (s + (char*) i);
c ist schon geil  gerade was sowas angeht.
__________________
entropie erfordert keine wartung
|
|
|
26.02.10, 13:43
|
#7
|
Anfänger
Registriert seit: Feb 2010
Beiträge: 6
Bedankt: 0
|
Ah ok isdigit kannte ich noch nicht.
Jetzt sieht alles wie folgt aus:
Code:
b=tokenk[3];
a=1;
d= atoi(tokenk+2);
if (isdigit(tokenk[2]) || isdigit(b))
{
if (isdigit(tokenk[3]))
{
b=tokenk[4];
}
switch(b)
{
case 'R': SetTableCellVal(tabPanelDATA, TABDATA_TABLEDATA, MakePoint (d, 3), tokenv);
case 'B': SetTableCellVal(tabPanelDATA, TABDATA_TABLEDATA, MakePoint (d, 4), tokenv);
case 'N': SetTableCellVal(tabPanelDATA, TABDATA_TABLEDATA, MakePoint (d, 1), tokenv);
case 'S': SetTableCellVal(tabPanelDATA, TABDATA_TABLEDATA, MakePoint (d, 2), tokenv);
default: break;
}
}
|
|
|
26.02.10, 18:12
|
#8
|
Mitglied
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
|
poste doch mal die ganze funktion. ich glaube die kann man optimieren.
__________________
entropie erfordert keine wartung
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:16 Uhr.
().
|