/****Allenamento funzioni su stringhe.



void unisci1(char str1[], char str2[]) /// se str1="ciao!!" e str2="XYZ", str1 diventa "cXiYaZo!!"
									  //se str1="XYZ" str2="ciao!!", str1 diventa "XcYiZao!!"

void unisci2(char str1[], char str2[]) // se str1="ciao" e str2="ABCD" str1 diventa "ciaoDCBA"


void unisci3(char str1[], char str2[]) // se str1="ciao" e str2="ABCD" str1 diventa "CIAOabcd"


void unisci4(char str1[], char str2[]) // se str1="0123" e str2="456"  str1 diventa "ABCDEFG"    (A==0, B==1, C==2, ... J==9)

***/



#include<stdio.h>
#include <string.h>

/// se str1="ciao!!" e str2="XYZ", str1 diventa "cXiYaZo!!"
//  se str1="XYZ" str2="ciao!!", str1 diventa "XcYiZao!!"


void unisci1(char str1[], char str2[]) {
	char str3[128];
	int i, j = 0;

	for (i = 0; str1[i] != '\0' && str2[i] != '\0'; i++) {
		// copio in str3 un carattere da str1 e un carattere da str2
		str3[j++] = str1[i];
		str3[j++] = str2[i];
	}
	if (str1[i] == '\0') // se la prima e' finita, copio la seconda
		while (str2[i] != '\0')
			str3[j++] = str2[i++];
	else
		while (str1[i] != '\0') // se la seconda e' finita, copio la prima
			str3[j++] = str1[i++];

	str3[j] = '\0'; // metto il terminatore
	strcpy(str1,str3);  // metto in str1 str3

}

void unisci2(char str1[], char str2[]) // se str1="ciao" e str2="ABCD" diventa "ciaoDCBA"
{
	int l1=strlen(str1);
	int l2=strlen(str2);
	int i;
	
	for(i=l2-1; i >=0; i--)  // ciclo che parte dal fondo di str2 e compia in str1
		str1[l1++]=str2[i];
	str1[l1]='\0';
}

void unisci3(char str1[], char str2[]) // se str1="ciao" e str2="ABCD" str1 diventa "CIAOabcd"
{
	int i,j;
	for(i=0; str1[i]!='\0'; i++)
		if(str1[i] >='a' && str1[i]<='z') str1[i]-=32;
	for(j=0; str2[j]!='\0'; j++,i++) {
	   str1[i] = str2[j];
	   if (str1[i]>='A' && str1[i]<='Z')  str1[i]+=32;
	}
	str1[i]='\0';
	// Nota che NON cambio str2!!!
}

void unisci4(char str1[], char str2[]) // se str1="0123" e str2="456"  str1 diventa "ABCDEFG"    (A==0, B==1, C==2, ... J==9)
{
	int i;
	strcat(str1,str2);
	for(i=0; str1[i]!='\0'; i++)
		if(str1[i]>='0' && str1[i]<='9') str1[i]+='A'-'0';   //se era '0' diventa 'A', se '1' diventa 'B',....
}

int   main() {
	char str1[128];
	char str2[128];

	printf("Stringa 1->");
	gets(str1);

	printf("Stringa 2->");
	gets(str2);

// decommenta la funzione che vuoi provare
	//unisci1(str1, str2);
	//unisci2(str1, str2);
	unisci3(str1, str2);
	//unisci4(str1, str2);
	printf("Str1=[%s]\n",str1);

	return 0;
}
