string und integer

Shooter2k

Erfahrenes Mitglied
Hallo liebes Forum,
ich komme mal wieder in C++ nicht weiter. Ich habe eine Funktion die mir einen String mit Zahlen zurückliefert. Nun möchte ich mir eine bestimmte Stelle(Position) des Strings eine einzelne Ziffer rauspicken und mit der Ziffer die vorher ein String war ein Integer draus machen um die Position als Interger Typ an eine Funktion zu übergeben, die nur Integer erwartet.

Beispiel:
Code:
// Funktion die einen String liefert:
string hash1(int anzahl)
{
	// Inhalt Code 0-9
	char inhalt[] = {'0','1','2','3','4','5','6','7','8','9','0'};
	string key;

	// größe des Arrays
	int counter = sizeof(inhalt)-1;

	// Time
	srand( (unsigned) time(NULL) );

	for(int i=0; i<anzahl;i++)
	{
		int random = 1 + ( rand() % counter );
		key += inhalt[random];	
	}

	return key;
}

int main(int argc, char* argv[])
{
         string hash1_key = hash1(30);
         int iID = 3;

         //28. Position des Strings ist eine Zahl 0-9
         int pos = hash1_key[28]; // z.B. pos = 7

         //Funktion die einen integer erwartet
         //string numberString, int number, unsigned int position
         insertNumberInString(hash1_key, tID, pos);
}

Leider ist die Variable Pos kein richtiger Integerwert die Funktion insertNumberInString wird nicht richtig ausgeführt. Muss ich vielleicht Pos in einen integer umwandeln? Ich komme mit den Typen nicht wirklich klar. Kann mir jemand helfen?

Vielen Dank
 
Hi,

auf ein bestimmtes Element in einem String kannst du zum Beispiel so zugreifen:
C:
char zeichen = dein_string.c_str()[position];
// evtl gehts auch so:
char zeichen = dein_string[position];

// die ziffer bekommst dann, indem du 0x30 abziehst, siehe ASCII Tabelle
int ziffer = zeichen - 0x30;

Hier kannst du mehr Infos über die ASCII-Zeichen nachlesen: Klick

Gruß
BK
 
Zuletzt bearbeitet:
Hi BK,
ich habe da noch ein anderes Problem. Ich möchte den erzeugten HASHCode mit der versteckten ID direkt an einen Browser übergeben. Dazu habe ich folgende Funktion geschrieben:

Code:
int openBrowser(string hash)
{ 
	string URL = "http://www.test.de/"+hash;

        // Browser öffnen mit statischer URL funktioniert es. 
	ShellExecute( 0, _T("open"), _T("http://www.test.de"), 0, 0, SW_SHOWNORMAL ); //funktioniert

        //ShellExecute( 0, _T("open"), _T(url), 0, 0, SW_SHOWNORMAL ); // funktioniert leider nicht :-(
	
	
	return 1;
}

Sobald ich das _T( .. entferne gibt es einen Fehler. Die Frage ist jetzt ob ich die URL vorher noch irgendwie umwandeln muss damit ich den erzeugten HASH an eine URL übergeben kann.
Die header #include <windows.h> , #include <shellapi.h> habe ich bereits eingebunden.

Vielen Dank nochmal
 
Hi,

kenn mich zwar mit Windows-Programmierung nicht aus, aber versuche mal folgendes:

C:
ShellExecute( 0, _T("open"), _T(url.c_str()), 0, 0, SW_SHOWNORMAL );

OT: Was ist denn das ominöse _T Makro?

Gruß,
BK
 
Code:
string url = "http://www.test.de/test";
ShellExecute( 0, _T("open"), _T(url.c_str()), 0, 0, SW_SHOWNORMAL );

Ich erhalte einen Fehler:
- Der Bezeichner "Lurl" ist nicht definiert

Falls es mit ShellExecute gar nicht funkrtioniert, gibt es vielleicht eine alternative dazu?

Hat noch keiner eine Lösung?
Ich bin inzwischen ein kleines bisschen weitergekommen.

Wenn ich nun:
Code:
        CString s;
	s.Format(_T("http://www.test.de/ %s"), hash);

	ShellExecute( NULL, _T("open"), s, NULL, NULL, SW_SHOWNORMAL );
Kann ich den String ohne Fehler manipulieren. Ich weis nur nicht wie ich den String jetzt richtig Formatiere.
Kann mir jemand dabei helfen?
Ich glaube %s steht für String aber bei der URL werden mir kryptische Zeichen angezeigt :-(

Danke
gruß
 
Zuletzt bearbeitet von einem Moderator:
Hi Sheel,
danke für deine Antwort. Hash ist ein 30 Ziffern langer code. Wenn ich %d mache, dann kommt bei der URL nur irgendwas kryptisches raus. Ich möchte einfach nur den HASH an die URL hängen. Das kann doch nicht so schwierig sein, dachte ich mir und nun sitze ich schon den halben Tag dran :-(
 
Zurück