改变上部到下部和下部到上部

时间:2015-05-31 13:50:41

标签: c tolower toupper

我是c编程的新手。我想问一下这个功能是否正常, 因为我不知道如何在main中查看此内容。

char uppertolowertoupper(char ch)
{

    if (ch>='A' && ch<='Z')
    {
        ch=tolower(ch);

        return ch;
    }
    else if (ch>='a' && ch<='a')
    {
        ch=toupper(ch);
        return ch;
    }

3 个答案:

答案 0 :(得分:2)

它似乎对您有用,但肯定可以改进。

  • 首先,它不完整。您最后错过了一个括号(和return statement)。
  • 接下来,并非所有C实现都使用ASCII。如果您在EBCDIC是字符集的系统上使用此代码,您会发现ch>='a' && ch<='z'不仅包含字母字符,而且ch>='A' && ch<='Z'包含类似内容...我建议使用{ {1}}和isupper代替。
  • 最后,islowertolower期望toupper类型的参数。您的int参数将转换为char,但除此之外还有更多...参数应该是int值或unsigned char。其他任何内容都是未定义的行为,这意味着您传递给这些函数的任何签名字符值都可能导致段错误(例如this question)。我建议更改此函数,使其接受EOF参数(而不是unsigned char参数)并返回char

答案 1 :(得分:1)

错误(可能是拼写错误):

    else if (ch>='a' && ch<='a')

这应该是:

    else if (ch>='a' && ch<='z')

其次,要在main中调用函数,这样的东西就足够了:

char ch;
ch=uppertolowertoupper('c');
printf("%c",ch);

只有在main之前声明或定义了函数时,上述方法才有效。

在main之前声明

char uppertolowertoupper(char);
int main()
{

    char ch;
    ch=uppertolowertoupper('c');
    printf("%c",ch);

}
char uppertolowertoupper(char ch)
{
  // your function
}
在main之前

定义

char uppertolowertoupper(char ch)
{

if (ch>='A' && ch<='Z')
{
ch=tolower(ch);

return ch;
}
else if (ch>='a' && ch<='z')
{
ch=toupper(ch);
return ch;
}
}
int main(){

 char ch;
 ch=uppertolowertoupper('c');
 printf("%c",ch);
 return 0;
}

答案 2 :(得分:0)

#include <stdio.h>
#include <ctype.h>

char uppertolowertoupper(char ch){
    if (ch>='A' && ch<='Z'){//if(isupper(ch)){
        ch=tolower(ch);
        return ch;
    } else if (ch>='a' && ch<='z'){//if(islower(ch)){
        ch=toupper(ch);
        return ch;
    }
}

int main(void){
    char test[] = "abcdefghijklmnopqrstrvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.?!";
    puts(test);
    for(char *p = test; *p ; ++p)
        putchar(uppertolowertoupper(*p));
    return 0;
}