Esercizio manipolazione stringhe

di il
2 risposte

Esercizio manipolazione stringhe

Salve. Qualcuno potrebbe spiegarmi perchè il mio programma va in crash?
Una stringa contiene nome e cognome di una persona separati tra loro da uno o piu` spazi. Una seconda stringa contiene il soprannome di una persona, e pu`o eventualmente contenere degli spazi. Si scriva una funzione C che prende in ingresso due stringhe del tipo suddetto e restituisce una nuova stringa in cui tra il nome ed il cognome `e inserito il soprannome tra parentesi tonde. Nella nuova stringa, sia tra il nome e la parantesi aperta che tra la parentesi chiusa ed il cognome deve essere presente uno (ed un solo) spazio. Ad esempio, se le due stringhe sono "Bruce Springsteen" e "The Boss", la stringa restituita deve essere: "Bruce (The Boss) Springsteen".
#include <stdio.h>
#include <stdlib.h>

char* aggiungi_soprannome(char *nome_cogn, char *soprannome) {
	
	char* ris;
	int i, j, k;
	int num_spazi = 0;
	
	for(k=0; nome_cogn[k]!='\0'; k++){
		if(nome_cogn[k]==' '){
			num_spazi++;
		}
	}
	
	ris = malloc(strlen(nome_cogn)-num_spazi+strlen(soprannome)+5); 

//5 contando 2 spazi, le due parentesi, e il carattere di terminazione
	
	for(k=0; nome_cogn[k]!=' '; k++){
		ris[k] = nome_cogn[k];
	}
	
	j=k;
	ris[j]=' ';
	j++;
	ris[j]='(';
	j++;
	
	for(i=0; soprannome[i]!='\0'; i++){
		ris[j]=soprannome[i];
		j++;
	}
	
	ris[j]=')';
	j++;
	ris[j]= ' ';
	j++;
	
	for(; nome_cogn[k]==' '; k++);
	
	for(; nome_cogn[k]!='\0';k++){
		ris[j] = nome_cogn[k];
		j++;
	}
	
	ris[j]='\0';
	
	return *ris;
}


	int main(void){
		
		printf("%s",aggiungi_soprannome("Vincenzo Rossi", "il bello"));
		
		return 0;
	}

2 Risposte

Devi accedere o registrarti per scrivere nel forum
2 risposte