Domanda Risolto Programma c89

Stato
Discussione chiusa ad ulteriori risposte.

gius1805

Utente Bronze
13 Novembre 2020
42
22
0
38
C:
/*ES2. Scrivere un programma in C che acquisisce una stringa s1 di
massimo 50 caratteri e un numero intero n. Il programma controlla se
n è maggiore di zero e minore della lunghezza della stringa. Se le
condizioni non sono verificate, continua a richiedere il valore. In
seguito il programma crea una nuova stringa s2 che contiene la
rotazione verso destra di s1 di n posizioni e la visualizza.
Esempio: s1="straniero" e n=2 -> s2="rostranie".*/

#include <stdio.h>
#include <string.h>

#define MAX 50

int main(){
    char s1[MAX], s2[MAX];
    int n, i, j, lung;

    printf("inserire stringa\n");
    scanf("%[^\n]", s1);
    lung=strlen(s1);
    printf("inserire valore rotazione\n");
    do{
        scanf("%d", &n);
    }while(n<0 || n>lung);

    j=0;
    for(i=n; i<lung; i++){
        s2[j]=s1[i];
        j++;
    }

    for(i=0; i<n; i++){
        s2[j]=s1[i];
        j++;
    }
    
    s2[j] = '\0';
    printf("%s\n", s2);
    return 0;
}
ciao a tutti. Ho scritto questo piccolo programma ma non capisco come faccia a funzionare. Quando eseguo lo slittamento il contenuto di s2[50] non dovrebbe scalare a s2[1]?
 
Ciò che devi fare tu è copiare in s2 i caratteri della posizione s1 spostati/ruotati di n posizioni rispetto all'originale. Quindi ciò che in s1 si trova in posizione i, dovrà essere in posizione i+n all'interno di s2. Quindi se n=1 s1[i] sarà copiato in s2[i+n].
Il tuo primo ciclo termina con l'indice j che è già alla lunghezza massima della stringa. Se lung vale 10, j varrà 10, quindi nel secondo ciclo stai copiando i caratteri a partire da questa posizione.

Ti lascio un indizio: devi utilizzare il modulo.
Non ti serve nemmeno il secondo contatore (la j).

Piccola cosa:
C:
    char s1[MAX] = {'\0'};
    char s2[MAX] = {'\0'};

se inizializzi in questo modo non ti devi preoccupare di inserire il carattere '\0'.
 
Stato
Discussione chiusa ad ulteriori risposte.