Char Array, Strings [Anfänger]



  • Hallo,

    ich bin neu hier, und seit kurzem lerne ich C (Studium).
    Habe vorher noch nie C geschrieben, und ich bin heute auf ein Problem gestoßen dass ich leider nicht lösen kann.

    Es geht bei meinem Problem um Folgendes:

    Ich gebe zwei Strings ein (die lese ich in ein char-Array). Wenn nun der erste String kürzer als der zweite ist, dann soll das so aussehen

    String 1: TEST
    String 2: NAMEDERPERSON

    String 1 muss dann so verlängert werden:

    String 1: TESTTESTTESTT
    String 2: NAMEDERPERSON

    Sprich, die Zeichen so lange auffüllen bis beide Strings die gleiche Länge haben.

    Habe es schon mit einer for-Schleife probiert, aber ich finde keinen Weg wie ich einzelne Buchstaben aneinander reihen kann. Das ist denke ich mal ziemlich simpel, mach aber gerade erst meine erste Erfahrungen mit C, und wäre sehr dankbar für Hilfe!



  • Zeige mal deinen bisherigen Code, das hilft beim Helfen.



  • #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    /*
     * 
     */
    int main() {
    
        char schluessel[100];
        char klartext[100];
    
        /*Schluesseltext eingeben*/
        printf("Geben Sie einen Schluesseltext ein: ");
        fgets(schluessel, sizeof(schluessel), stdin);
    
        /*Klartext eingeben*/
        printf("Geben Sie Ihren Klartext ein: ");
        fgets(klartext, sizeof(klartext), stdin);
    
        /*Testausgaben*/
    
        return (0);
    
    }
    

    Wie gesagt, ich habe eine while und for Schleife probiert, die laufen aber ins Leere. Ich weiß nicht wie ich das anpacken soll.



  • int j,len,i, len_text;
    j = strlen(key); // am Ende anfangen zu schreiben
    len = j;  // Länge speichern
    len_text = strlen(klartext);
    i = 0; // Index
    while(j<len_text) // bis zum Ende des Klartextes
    {
    	if(i>=len) // wenn Index >= Länge, Index auf 0 setzen
    		i=0;
    	key[j++]=key[i++]; // key[j]=key[i] j und i danach jeweils erhöhen
    }
    key[j]=0; // Nullterminierung
    

    Edit: es wurde alles aufgefüllt 🙄



  • Ich weiß jetzt zwar nicht welcher von beiden Strings aufgefüllt werden soll, aber so könnte es funktionieren:

    /* Auffuellen von schluessel bis auf Länge Klartext: */
    while( strlen(schluessel)<strlen(klartext) )
      strncat( schluessel,schluessel,strlen(klartext)-strlen(schluessel) );
    

    Wegen überlappender Speicherbereiche könnte es je nach strncat-Implementierung zu Fehlern kommen, dann müsste man memmove nehmen. Das wäre dann deine Aufgabe.



  • Ich habe es nicht ausprobiert:

    int i, len_s, len_k;
    
    len_s = strlen(schluessel);
    len_k = strlen(klartext);
    
    for(i=len_s;i<len_k;i++)
      schluessel[i] = schluessel[i % len_s];
    
    schluessel[i] = '\0';
    

    Das % in i % len_s ist der Modulo-Operator. Der ergibt den Rest beim Teilen.

    Du solltest allerdings noch vorher prüfen ob len_s > 0 ist.



  • Vielen Dank für die schnelle Hilfen!

    Es scheint zu funktionieren, danke! 🙂

    Habe diesen Ansatz genommen:

    int j,len,i, len_text;
    j = strlen(key); // am Ende anfangen zu schreiben
    len = j;  // Länge speichern
    len_text = strlen(klartext);
    i = 0; // Index
    while(j<len_text) // bis zum Ende des Klartextes
    {
        if(i>=len) // wenn Index >= Länge, Index auf 0 setzen
            i=0;
        key[j++]=key[i++]; // key[j]=key[i] j und i danach jeweils erhöhen
    }
    key[j]=0; // Nullterminierung
    .
    .
    .
    .
    .
    

Log in to reply