myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

C int aus char zeigervektor

Willkommen

myGully

Links

Forum

 
Antwort
 
Themen-Optionen Ansicht
Ungelesen 23.02.10, 14:15   #1
susay
Anfänger
 
Registriert seit: Feb 2010
Beiträge: 6
Bedankt: 0
susay ist noch neu hier! | 0 Respekt Punkte
Standard 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;
		}
		
		
  	}
susay ist offline   Mit Zitat antworten
Ungelesen 23.02.10, 18:37   #2
grieche1705
Newbie
 
Registriert seit: Jan 2009
Beiträge: 54
Bedankt: 8
grieche1705 ist noch neu hier! | 0 Respekt Punkte
Standard

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
grieche1705 ist offline   Mit Zitat antworten
Ungelesen 23.02.10, 18:51   #3
urga
Mitglied
 
Benutzerbild von urga
 
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
urga ist noch neu hier! | 0 Respekt Punkte
Standard

oder (tokenk[2] - '0') == a
__________________
entropie erfordert keine wartung
urga ist offline   Mit Zitat antworten
Ungelesen 24.02.10, 07:52   #4
susay
Anfänger
 
Registriert seit: Feb 2010
Beiträge: 6
Bedankt: 0
susay ist noch neu hier! | 0 Respekt Punkte
Standard

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?
susay ist offline   Mit Zitat antworten
Ungelesen 24.02.10, 13:55   #5
susay
Anfänger
 
Registriert seit: Feb 2010
Beiträge: 6
Bedankt: 0
susay ist noch neu hier! | 0 Respekt Punkte
Standard

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;
					}
... }
susay ist offline   Mit Zitat antworten
Ungelesen 26.02.10, 18:12   #6
urga
Mitglied
 
Benutzerbild von urga
 
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
urga ist noch neu hier! | 0 Respekt Punkte
Standard

poste doch mal die ganze funktion. ich glaube die kann man optimieren.
__________________
entropie erfordert keine wartung
urga ist offline   Mit Zitat antworten
Ungelesen 24.02.10, 19:38   #7
urga
Mitglied
 
Benutzerbild von urga
 
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 453
Bedankt: 137
urga ist noch neu hier! | 0 Respekt Punkte
Standard

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
urga ist offline   Mit Zitat antworten
Ungelesen 26.02.10, 13:43   #8
susay
Anfänger
 
Registriert seit: Feb 2010
Beiträge: 6
Bedankt: 0
susay ist noch neu hier! | 0 Respekt Punkte
Standard

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;

		 	} 	
		}
susay ist offline   Mit Zitat antworten
Antwort


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

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 Uhr.


Sitemap

().