tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von Many0815
  • 1 Beitrag von Bratkartoffel
ERLEDIGT
JA
ANTWORTEN
11
ZUGRIFFE
558
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Shooter2k
    Shooter2k Shooter2k ist offline Mitglied Brokat
    Registriert seit
    Mar 2002
    Ort
    Hamburg
    Beiträge
    381
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    
    // 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
     
    Wer mit dem Strom schwimmt, erreicht die Quelle nie.

  2. #2
    Many0815 Many0815 ist offline Mitglied Bronze
    Registriert seit
    Oct 2009
    Beiträge
    35
    Shooter2k bedankt sich. 

  3. #3
    Avatar von Bratkartoffel
    Bratkartoffel Bratkartoffel ist offline gebratene Kartoffel
    tutorials.de Premium-User
    Registriert seit
    Jun 2007
    Ort
    Passau (Niederbayern)
    Beiträge
    1.394
    Hi,

    auf ein bestimmtes Element in einem String kannst du zum Beispiel so zugreifen:
    Code c:
    1
    2
    3
    4
    5
    6
    
    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
    Geändert von Bratkartoffel (13.12.11 um 10:41 Uhr)
    Shooter2k bedankt sich. 
    Über eine gute Bewertung freut sich jeder ;)
    Bitte erledigte Threads als "Erledigt" markieren.

    "Though a program be but three lines long, someday it will have to be maintained.''
    -- Geoffrey James, "The Tao of Programming"

  4. #4
    Avatar von Shooter2k
    Shooter2k Shooter2k ist offline Mitglied Brokat
    Registriert seit
    Mar 2002
    Ort
    Hamburg
    Beiträge
    381
    Danke ihr habt mir sehr geholfen

    gruß
     
    Wer mit dem Strom schwimmt, erreicht die Quelle nie.

  5. #5
    Avatar von Shooter2k
    Shooter2k Shooter2k ist offline Mitglied Brokat
    Registriert seit
    Mar 2002
    Ort
    Hamburg
    Beiträge
    381
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    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
     
    Wer mit dem Strom schwimmt, erreicht die Quelle nie.

  6. #6
    Avatar von Bratkartoffel
    Bratkartoffel Bratkartoffel ist offline gebratene Kartoffel
    tutorials.de Premium-User
    Registriert seit
    Jun 2007
    Ort
    Passau (Niederbayern)
    Beiträge
    1.394
    Hi,

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

    Code c:
    1
    
    ShellExecute( 0, _T("open"), _T(url.c_str()), 0, 0, SW_SHOWNORMAL );

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

    Gruß,
    BK
     
    Über eine gute Bewertung freut sich jeder ;)
    Bitte erledigte Threads als "Erledigt" markieren.

    "Though a program be but three lines long, someday it will have to be maintained.''
    -- Geoffrey James, "The Tao of Programming"

  7. #7
    Avatar von derpfaff
    derpfaff derpfaff ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Beiträge
    167
    Einfach ausgedrückt wandelt _T() den Wert in der Klammer (char oder string) in UNICODE um.
     

  8. #8
    Avatar von Shooter2k
    Shooter2k Shooter2k ist offline Mitglied Brokat
    Registriert seit
    Mar 2002
    Ort
    Hamburg
    Beiträge
    381
    Code :
    1
    2
    3
    
     
    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 :
    1
    2
    3
    4
    
            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ß
    Geändert von sheel (13.12.11 um 17:18 Uhr) Grund: Doppel
     
    Wer mit dem Strom schwimmt, erreicht die Quelle nie.

  9. #9
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Hi

    %s uÄ. muss zu hash passen, nicht zum String.
    Wenn hash ein int ist: %d
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  10. #10
    Avatar von Shooter2k
    Shooter2k Shooter2k ist offline Mitglied Brokat
    Registriert seit
    Mar 2002
    Ort
    Hamburg
    Beiträge
    381
    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
     
    Wer mit dem Strom schwimmt, erreicht die Quelle nie.

  11. #11
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Es gibt keinen int-Typ für 30-stellige Dezimalzahlen?
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  12. #12
    Avatar von Shooter2k
    Shooter2k Shooter2k ist offline Mitglied Brokat
    Registriert seit
    Mar 2002
    Ort
    Hamburg
    Beiträge
    381
    Ich bin mir nicht sicher ob es einen Int typ für 30 stellen gibt. Habe das mal gegoogelt der maximale Bereich liegt bei -2147483648 und +2147483647 und die Angabe lautet %d oder %i.

    Quelle:
    http://pronix.linuxdelta.de/C/standa...ierung_8.shtml

    Vielleicht ist es besser daraus einen String zu machen. Aber ich weis leider nicht wie ich das machen soll. VIelleicht kannst du mir da weiterhelfen. Würde mich sehr freuen.

    gruß
     
    Wer mit dem Strom schwimmt, erreicht die Quelle nie.

Ähnliche Themen

  1. String to Integer
    Von Fichte im Forum VisualStudio & MFC
    Antworten: 0
    Letzter Beitrag: 14.10.07, 20:02
  2. String in Integer
    Von paul meier im Forum .NET Windows Forms
    Antworten: 1
    Letzter Beitrag: 18.09.06, 17:47
  3. [c++] String to Integer
    Von moistwanted im Forum C/C++
    Antworten: 6
    Letzter Beitrag: 24.05.05, 16:50
  4. integer und string
    Von folio im Forum PHP
    Antworten: 4
    Letzter Beitrag: 30.12.04, 20:44
  5. String als Integer
    Von lindin im Forum Java
    Antworten: 4
    Letzter Beitrag: 25.10.04, 17:12