C-希望使用符号转换小写和大写字母

C-希望使用符号转换小写和大写字母,c,C,我想在C中将小写字母转换为大写字母,反之亦然。我已经这样做了,但当我使用像“u”或“.”或“,”这样的符号时。。。。在输入端,我得到了输出端的随机字符,就像一个正方形内的问号 输入:AAbb 输出:aaBB 输入:a_a 产出:A⍰a 我如何使用符号来实现这一点 代码: #包括 内部主(空) { chara[50]; int x=1; 而(x>0){ 获得(a); int i,长度=0; 对于(i=0;a[i]!='\0';i++) 长度+=1; 对于(i=0;i不要改变任何你不想改变的东西 替

我想在C中将小写字母转换为大写字母,反之亦然。我已经这样做了,但当我使用像“u”或“.”或“,”这样的符号时。。。。在输入端,我得到了输出端的随机字符,就像一个正方形内的问号

输入:AAbb
输出:aaBB
输入:a_a
产出:A⍰a

我如何使用符号来实现这一点

代码:

#包括
内部主(空)
{
chara[50];
int x=1;
而(x>0){
获得(a);
int i,长度=0;
对于(i=0;a[i]!='\0';i++)
长度+=1;

对于(i=0;i不要改变任何你不想改变的东西

替换:

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


不能。请参阅ascii表。大写字母和小写字母的不同之处在于位5 00100000b,它在十进制中相当于32。 但这只适用于字母

你应该用“如果”来处理任何不是字母的东西

…使用符号转换小写和大写字母
…当我在输入上使用像“uu”或“.”或“,”…这样的符号时,我得到的是随机字符

使用<代码> iUpPiver()/<代码> <代码> ToWORE()/<代码>,<代码> ToupPror()/代码>。这是<强>标准和高度<强>可携带< /强>切换情况。考虑在不同平台上有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`
  }
}

仍然建议使用标准函数。

C标准在
中指定函数来处理基本字符集的大小写:

  • 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;
}
#包括
#包括
内部主(空){
chara[50];
if(fgets(a、a尺寸、标准尺寸)){
int i;
对于(i=0;a[i]!='\0';i++){
无符号字符c=a[i];
a[i]=岛下(c)-岛上(c):岛下(c);
}
printf(“%s”,a);
}
返回0;
}

<代码> > ScFielas,它是C++,它不会编译为C.@ SID,我犹豫了一下,因为作者在标题和问题中明确地写了“C”,并且使用了大部分的C习语。我之所以这样做是因为:C中运行它的目的似乎比把它变成C++风格的程序更为接近。事实证明,他刚刚编辑了C标记,所以这才是真正的意图:)@spectras,好吧。没什么大不了的。顺便说一句,那里的
循环不需要两个
,只要使用
a[i]!=0
作为交换大小写时的循环条件。
length
是不必要的。插入语句:
#include
,然后使用
toupper()
tolower()
功能。然后将处理字母表,并且任何其他字符将保持不变。
a[i] = islower(a[i]) ? toupper(a[i])
                     : tolower(a[i]);
#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`
  }
}
        // Avoid magic numbers like 32
        a[i] ^= 'a' ^ 'A';
#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;
}