EX: String

di il
6 risposte

EX: String

Salve a tutti.
Sto facendo un esercizio che data un stringa s, restituisca una nuova stringa costituita dagli ultimi 2 caratteri di s e se la stringa abbia lunghezza inferiore a 2 deve restituire NULL.
Questa è la mia soluzione, ma non funzione correttamente.
Se la stringa è inferiore a 2 mi stampa NULL, quindi la prima parte funziona, mentre se la stringa contiene più di un caratteri mi da dei problemi.
Entra nel ciclo for e anche negli if, in quanto ho fatto una prova inserendoci dei printf.
Ma mi stampa un sempre uno stesso carattere senza senso.
Chi sa darmi una mano?
#include<stdio.h>
#include<string.h>
	char* ultime_due (char* s);
		int main() {
			char* s = "ciao";
			char* s1 = ultime_due(s);
			if (s1 == NULL)
				printf("NULL");
			else 
				printf("%c" , s1);
		return 0;
}

char* ultime_due (char* s) {
	int i;
	char* s1;
	int n = strlen (s);
	if (n < 2) 
		return NULL;
	for (i = 0; i<n; i++) {
		if (i == n-2){
			s1[0] = s[i];
			}
		if (i == n-1) {
			s1[1] = s[i];
		}
	return s1;
}	

6 Risposte

  • Re: EX: String

    Direi che ci sono degli errori, il più grave è che non allochi lo spazio per la nuova stringa ...

    Leggi questo
    
    int main() 
    {
    	char s[] = "ciao";
    	char *s1 = ultime_due(s);
        
    	printf("%s" , s1);
    
    	return 0;
    }
    
    char* ultime_due(char* s) 
    {
    	char *res = NULL;
    	int n = strlen(s);
    
    	if(n > 1)
    	{
    		res = (char *)malloc(3);
    		strcpy(res, s+n-2);
    	}
    		
    	return res;
    }  
    
  • Re: EX: String

    Correggo cosa?
  • Re: EX: String

    piergozzo ha scritto:


    Correggo cosa?
    Non correggi ma correggo ... stavo correggendo io la mia risposta ...
  • Re: EX: String

    Ok, sei stato molto utile.
    Grazie mille
  • Re: EX: String

    piergozzo ha scritto:


    Ok, sei stato molto utile.
    Beh ... ma hai compreso i problemi del tuo codice?
    Grazie mille
    Prego
  • Re: EX: String

    Si si, ora funziona.
Devi accedere o registrarti per scrivere nel forum
6 risposte