i changed it to
Code:
else if ((str2[index2]=='\0')||((str1[index1]<str2[index2])&&(str2[index2]!='\0')))
i get the same result as before
Code:
#include <stdio.h>
int merge(char str1[], int index1,char str2[],int index2, char result[], int index3);
int merge_strings(char str1[], int index1,char str2[],int index2, char result[], int index3);
int main() {
char input[255];
char input2[255];
char result[510];
int index,flag,ch;
printf("enter the first string \n");
for (index = 0; index < 254 && (ch = getchar()) != '\n' && ch >=0; ++index)
{
input[index] = ch;
}
input[index] = '\0';
printf("enter the second string \n");
for (index = 0; index < 254 && (ch = getchar()) != '\n' && ch >=0; ++index)
{
input2[index] = ch;
}
input2[index] = '\0';
flag=merge_strings(input,0,input2,0,result, 0);
if (flag)
{
printf("%s is valid.\n",result);
}
else
{
printf("%s is invalid.\n",result);
}
return 0;
}
int merge_strings(char str1[], int index1,char str2[],int index2, char result[], int index3)
{
if ((str1[index1] == '\0') && (str2[index2] == '\0'))
{
result[index3] = '\0';
return 1;
}
/* non-alpha char or non-increasing order detected */
else if ((((str1[index1]<'a')||(str1[index1]>'z'))&&((str1[index1]<'A')||(str1[index1]>'Z'))&&(str1[index1]>str1[index1+1]))&&(((str2[index2]<'a')||(str2[index2]>'z'))&&((str2[index2]<'A')||(str2[index2]>'Z'))&&(str2[index2]>str2[index2+1])))
{
return 0;
} /* end of str2 or str1's char is less than str2's char */
else if ((str2[index2]=='\0')||((str1[index1]<str2[index2])&&(str2[index2]!='\0')))
{
result[index3] = str1[index1];
return merge_strings(str1,index1+1,str2,index2,result,index3+1);
}
else
{
result[index3] = str2[index2];
return merge_strings(str1,index1,str2,index2+1,result,index3+1);
}
}