使用 ASCII 将小写字母转换为大写字母

And*_*nir 0 c ascii lowercase uppercase

我正在尝试使用 ASCII 表将所有小写字母转换为大写字母!这很容易处理,我已经弄清楚了代码。问题是,如果单词之间有空格,那么程序只会更改第一个单词,而在空格之后不会打印任何内容。

示例
词:Andreas 给出:ANDREAS
词:TeSt123Ha 给出:TEST123HA
但是!!!
字:你好 45 给出:你好
,在空格之后它什么都不打印!

我知道 ASCII 表中的空间等于 32,在我的代码中我告诉程序,如果您正在阅读的当前代码不在 97 和 122 之间,那么不要执行任何更改!

但它仍然无法正常工作!

char currentletter;
int i;

for (i=0; i<49; i++)    
{
    currentletter = str[i];

    if ((currentletter > 96) && (currentletter < 123))
    {
        char newletter;
        newletter = currentletter - 32;
        str[i] = newletter;
    }
    else
    {
        str[i] = currentletter;
    }
}
printf("%s\n", str);
Run Code Online (Sandbox Code Playgroud)

小智 7

翻转第 5 个最低位应该会有所帮助。

每个小写字母等于 32 + 大写字母。这意味着简单地翻转位置 5 处的位(从位置 0 处的最低有效位开始计数)会反转字母的大小写。 https://web.stanford.edu/class/cs107/lab1/practice.html

char *str;
int str_size = sizeof(str);

for(int i=0; i<str_size;i++){
   if((str[i]>96) && (str[i]<123)) str[i] ^=0x20;
} 
Run Code Online (Sandbox Code Playgroud)