I am trying to write a program which will only compare same case letter, but first it should convert any case to a particular case.
But I am having trouble converting the string to any particular case using a function, though I have figured out how to do that without a function. Here's my code. Can anyone help me find out where I am going wrong?
#include<stdio.h>
#include<string.h>
void order(char input[])
{
int i=0;
while(input[i]!='\0')
{
if(input[i]>'65' && input[i]<'92')
{
input[i]+=32;
// printf("WORKING\n");
}
i++;
}
}
int main()
{
char input1[101], output1[101];
char input2[101], output2[101];
int r;
scanf("%s",tolower(input1));
scanf("%s",input2);
order(input1);
order(input2);
printf("%s\n",input1);
printf("%s\n",input2);
/*
r=strcmp(output1,output2);
if(r<0)
printf("-1\n");
else if(r>0)
printf("1\n");
else
printf("0\n");
*/
}
Change this:
if(input[i]>'65' && input[i]<'92')
to this:
if(input[i] >= 65 && input[i] <= 90)
since you want to check for the ASCII codes of A and Z. Notice that because you used magic numbers, you made a mistake for both. I had to check an ASCII table to figure that out that you needed the equality sign as well, and 90 (code for Z), instead of 92 (code for '\\').
I suggest you then to use characters constants, like this:
if(input[i] >= 'A' && input[i] <= 'Z')
Constant and off-by-1 errors.
'65'
is a multi byte constant and certainly 65
was meant. @gsamaras . ASCII Z
is 90.
// if(input[i]>'65' && input[i]<'92') if(input[i]>65 && input[i]< Zee)
Off by 1 due to >
vs. >=
// if(input[i]>'65' && input[i]<'92') // if(input[i]>65 && input[i]< Zee) if(input[i] >= 65 && input[i] <= 90)
Character constants are more self documenting. Consider 'A'
if(input[i] >= 'A' && input[i] <= 'Z')
Ideally code would use standard C library functions to detect case.
if(isupper((unsigned char) input[i]))
Yet code could call toupper()
directly and skip the if()
.
while(input[i]) {
input[i] = tolower((unsigned char) input[i]);
i++;
}
// or
for (size_t i = 0; input[i]; i++) {
input[i] = tolower((unsigned char) input[i]);
}
You're trying to pass a char*
to the tolower
in scanf("%s",tolower(input1));
.
Change it to scanf("%s", input1);
c - convert a mixed-case string to all lower case should tell you how to convert a string to lower case.
Take a look at https://linux.die.net/man/3/tolower and https://linux.die.net/man/3/toupper .
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.