C - 想要使用符号转换小写和大写字母

时间:2018-04-23 00:27:45

标签: c

我想在C中将小写字母转换为大写字母,反之亦然。我已经这样做了,但是当我使用像' _'或'。'或',' ....在输入中,我在输出上得到随机字符,就像广场内的问号一样。

  

输入:AAbb
  输出:aaBB
  输入:a_A
  输出:A⍰a

如何使用符号进行此操作?

代码:

{{1}}

4 个答案:

答案 0 :(得分:3)

不要改变任何你不想改变的东西。

替换:

a[i]=a[i]^32;

if (a[i] >= 'A' && a[i] <= 'Z' ||
    a[i] >= 'a' && a[i] <= 'z')
{
    a[i] = a[i] ^ 32;
}

如果你#include <ctype.h>,你可以这样做:

a[i] = islower(a[i]) ? toupper(a[i])
                     : tolower(a[i]);

答案 1 :(得分:3)

  

...使用符号转换小写和大写字母
  ...当我使用像&#39; _&#39;或&#39;。&#39;或&#39;,&#39; ....在输入上我得到随机字符

使用isupper()tolower()toupper()。这是切换案例的标准和高度便携式方式。考虑在各种平台上有超过26个字母。

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

int main(void ){
  char a[50];
  {
    gets(a);   // dubious, consider fgets().
    int i,length=0;

    for(i=0;a[i];i++){
      unsigned char ch = a[i];
      if (isupper(ch) {
        a[i]= tolower(ch);
      } else {
        a[i]= toupper(ch);
      }
    }
    printf("%s",a);  // use `a` , not `&a`
  }
}

如果代码想要在不使用标准函数的情况下切换大小写,并且知道char是一个字母,则代码可以使用以下代码。它合理地假设A-Z和a-z相差一位,如ASCIIEBCDIC

中的情况
        // Avoid magic numbers like 32
        a[i] ^= 'a' ^ 'A';

仍建议使用标准功能。

答案 2 :(得分:1)

C标准指定<ctype.h>中的函数来处理基本字符集的大小写:

  • islower(c)测试字符是否为小写
  • isupper(c)测试字符是否为大写
  • tolower(c)将任何字符转换为小写版本
  • toupper(c)将任何字符转换为大写字母

以下是如何使用这些:

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

int main(void) {
    char a[50];

    if (fgets(a, sizeof a, stdin)) {
        int i;
        for (i = 0; a[i] != '\0'; i++) {
            unsigned char c = a[i];
            a[i] = islower(c) ? toupper(c) : tolower(c);
        }
        printf("%s", a);
    }
    return 0;
}

答案 3 :(得分:-2)

你不能。见ascii表。与小写字母的大写字母不同的是位5 00100000b,其小数等于32。 但这仅适用于信件。

你应该把ifs用来处理任何不是字母的东西。