我正在尝试编写一个只比较相同大小写字母的程序,但是首先它应该将任何大小写转换为特定大小写。
但是我在使用函数将字符串转换为任何特殊情况时遇到了麻烦,尽管我已经找到了没有函数的情况。这是我的代码。谁能帮助我找出我要去哪里哪里?
#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");
*/
}
答案 0 :(得分:4)
更改此:
if(input[i]>'65' && input[i]<'92')
对此:
if(input[i] >= 65 && input[i] <= 90)
因为您要检查A和Z的ASCII码。请注意,因为您使用了幻数,所以两者都弄错了。我必须检查一个ASCII表来确定您还需要等号,而不是92(Z的代码)和90(Z的代码)。
我建议您然后使用字符常量,如下所示:
if(input[i] >= 'A' && input[i] <= 'Z')
答案 1 :(得分:4)
恒定和不按1错误。
'65'
是一个多字节常量,当然是65
的意思。 @gsamaras。 ASCII Z
为90。
// if(input[i]>'65' && input[i]<'92')
if(input[i]>65 && input[i]< Zee)
由于>
与>=
// if(input[i]>'65' && input[i]<'92')
// if(input[i]>65 && input[i]< Zee)
if(input[i] >= 65 && input[i] <= 90)
字符常量更具自记录性。考虑'A'
if(input[i] >= 'A' && input[i] <= 'Z')
理想的代码将使用标准的C库函数来检测大小写。
if(isupper((unsigned char) input[i]))
但代码可以直接调用toupper()
,而跳过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]);
}
答案 2 :(得分:1)
您正在尝试将[1, 5, 6, 25, 76, 376, 625]
中的char*
传递给tolower
。
将其更改为scanf("%s",tolower(input1));
c - convert a mixed-case string to all lower case应该告诉您如何将字符串转换为小写。
看看https://linux.die.net/man/3/tolower和https://linux.die.net/man/3/toupper。