 
  
 
 
  
 
Sehr schönDaveX hat geschrieben:Ja sehr gerne. Sobald ich mich in diesem Bereich noch tiefer eingearbeitet habe, liebend gerne.


 Würde mich sehr freuen. Es ist eine tolle Sache, Wissen auch weiterzugeben.
 Würde mich sehr freuen. Es ist eine tolle Sache, Wissen auch weiterzugeben. 

*daumen hoch*DaveX hat geschrieben:Ja sehr gerne. Sobald ich mich in diesem Bereich noch tiefer eingearbeitet habe, liebend gerne.


 , ich vergesse es nicht. Ich will mich nur noch etwas tiefer in die Materie rein arbeiten, bevor ich soweit bin etwas darüber zu schreiben.
, ich vergesse es nicht. Ich will mich nur noch etwas tiefer in die Materie rein arbeiten, bevor ich soweit bin etwas darüber zu schreiben.  Grüße DaveX
 Grüße DaveX 
 , ich hoffe es ist okay wenn ich hier noch folgenden Eintrag hinzufüge. Ich bräuchte wenn möglich nochmal kurz Hilfe.
, ich hoffe es ist okay wenn ich hier noch folgenden Eintrag hinzufüge. Ich bräuchte wenn möglich nochmal kurz Hilfe.Code: Alles auswählen
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <math.h>
 
const char     Literals[] = "abcdefghijklmnopqrstuvwxyz";
const unsigned NLiterals  = sizeof( Literals) - 1;
 
int main()
{
    const char TestString[] = "caaaaaaaaaaa"; // Mit diesem String kommt es schon zu einem falschen Index
                                                                                // obwohl der Index deutlich unter 18446744073709551615U liegt!
    size_t     StrLgth      = strlen( TestString );
    int        pos[64]      = { 0 };                // Zum indexieren der Zeichen in Literals[]
    int        LitAsNum[17] = { 0 };                // Zur Speicherung der gemappten Zeichen in TestString[]
    uint64_t   Index        = 0U;                   // String-Index
    int        MinCount     = StrLgth;              // Zur Berechnung des String-Indexes
 
    for( unsigned i = 0; i < NLiterals; i++ )
        pos[( int )Literals[i]] = i;                // Zeichen in Literals[] indexieren
 
    for( unsigned i = 0; i < StrLgth; i++ )
        LitAsNum[i] = pos[( int )TestString[i]];    // Zeichen in TestString[] mappen und speichern
 
    /*
     * Hier wird nun der Index des Strings berechnet.
     */
    for( unsigned i = 0; i < StrLgth; i++ )
    {
        Index += pow( NLiterals, MinCount-1 ) * LitAsNum[i];
        MinCount--;
        if( MinCount == 0 )
            Index += 1;
    }
 
    /*
     * Hier werden alle Möglichkeiten mit weniger Stellen hinzu addiert.
     */
    for( unsigned i = 1; i < StrLgth; i++ )
        Index += pow( NLiterals, i );
 
    printf( "Index = %ju\n", Index );
 
    return 0;
}Code: Alles auswählen
Index += pow( static_cast<long double>( NLiterals ), static_cast<long double>( MinCount-1) ) * LitAsNum[i];Code: Alles auswählen
uint64_t pow_u64( uint64_t base, uint64_t pow )
{
    if( pow ==  0 )
        return 1;
    if( pow < 0 )
        return 0;   // No negative power is an integer
    uint64_t result = 1;
    for( uint64_t i = 0; i < pow; i++ )
        result *= base;
    return result;
}
pow kann nicht negativ sein, da Du ein uint verlangst.DaveX hat geschrieben:Vielen Dank für deine Antwort. Ich habe nun folgendes gemacht:Code: Alles auswählen
uint64_t pow_u64( uint64_t base, uint64_t pow ) { ... if( pow < 0 ) return 0; // No negative power is an integer }
Darf ich fragen, warum Du den Index im Dezimalsystem verwendest? Vielleicht bietet sich zum Beispiel das 26er-Zahlensystem verwendest und als Ziffern könntest Du dann die Buchstaben verwenden? Daraus würde sich eine vergleichsweise einfache Abbildung ergeben...DaveX hat geschrieben:Das funktioniert soweit. Werde aber für mein Vorhaben womöglich das hier nutzen müssen: https://gmplib.org/.
Dankeschön.
Könntest du mir ein kleines Beispiel zeigen, wie du das genau meinst? Habe es nicht ganz verstanden. Klingt aber Interessant. Mir fiel eben keine Alternative ein, wie ich das sonst machen sollte als den Index im Dezimalsystem anzuzeigen bzw. auszugeben.Xin hat geschrieben:Darf ich fragen, warum Du den Index im Dezimalsystem verwendest? Vielleicht bietet sich zum Beispiel das 26er-Zahlensystem verwendest und als Ziffern könntest Du dann die Buchstaben verwenden? Daraus würde sich eine vergleichsweise einfache Abbildung ergeben...