使用C中的函数将大写字符串转换为小写的程序中的问题

时间:2018-12-05 13:54:52

标签: c string function

我正在尝试编写一个只比较相同大小写字母的程序,但是首先它应该将任何大小写转换为特定大小写。

但是我在使用函数将字符串转换为任何特殊情况时遇到了麻烦,尽管我已经找到了没有函数的情况。这是我的代码。谁能帮助我找出我要去哪里哪里?

#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");

    */

}

3 个答案:

答案 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)
    
  • 由于>>=

    相差1
    // 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/tolowerhttps://linux.die.net/man/3/toupper