#include <stdio.h>    
#include <ctype.h>
#include <string.h>
char* conv_string(char*data,int type){
    int str_len=strlen(data);
    char *conv_data=data;
    switch(type){
        case 1:{
            for(int i =0;i<str_len;i++){
                if(data[i]>='a' && data[i]<='z'){
                    conv_data[i]=data[i]-'a'+'A';  //-32
                }else{
                    conv_data[i]=data[i];
                }
            }
            break;
        }
        case 2:{
            for(int i =0;i<str_len;i++){
                if(data[i]>='A' && data[i]<='Z'){
                    conv_data[i]=data[i]+'a'-'A'; //+32
                }else{
                    conv_data[i]=data[i];
                }
               
            }
            break;
        }
        default:{
            printf("default \n");
            for(int i =0;i<str_len;i++){
                conv_data[i]=toupper(data[i]);
 		/*Direct way conver toupper for  uppercase conversion ,tolower                                         for   lowercase conversion*/
            }
            break;
        }
        
    }
    return conv_data;
}
 
void callby_func(char(*callback_fn(char* ,int )),char *data,int type)    {
    char strret[strlen(data)+1];
    strcpy(strret,callback_fn(data ,type ));
    printf("conv string %s\n",strret);
}
int main()    
{    
    char strval[10]="AbcDZEf";
    void (*ptr_func)(char*,char*,int);
    ptr_func=callby_func;
    (*ptr_func)(conv_string,strval,1);

    printf("conv string %s\n",conv_string(strval,1));
    return 0;    
}  
