c++ - s[i]^=32 是如何将大写转换为小写的?

标签 c++ string uppercase lowercase

int main()
{
    string s;
    cout << "enter the string :" << endl;
    cin >> s;
    for (int i = 0; i < s.length(); i++)
        s[i] ^= 32;
    cout << "modified string is : " << s << endl;
    return 0;
}

我在 stackoverflow 上看到这段将大写字母转换为小写字母的代码。

但是我不明白 s[i] = s[i]^32 这行。

它是如何工作的?

最佳答案

^=exclusive-or赋值运算符。 32 在二进制中是 100000,因此 ^= 32 切换目标中的第五位。在 ASCII 中,大小写字母相隔 32 个位置,因此这会将小写字母转换为大写字母,反之亦然。

但它仅适用于 ASCII,不适用于 Unicode,并且仅适用于字母。要编写可移植的 C++,你不应该假设字符编码是 ASCII,所以请不要使用这样的代码。 @πìντα ῥεῖs 的回答显示了一种正确的方法。

关于c++ - s[i]^=32 是如何将大写转换为小写的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40641468/

相关文章:

c++ - 如何在没有标准库的情况下在 C++ 中为 braced-init-list 创建构造函数?

c++ - 在 C++ 中重载运算符 =

javascript - Qualtrics——大写开放式文本

Python 字符串修复,用于在所需的数组元素中插入空格

c++ - 如何在 C++ 中取一个字节的二进制补码?

c++ - 为什么语句 “cout << '\\\\';” 不会失败?

PHP - 用一个像字符串一样命名的变量替换一个字符串

javascript - 翻转匹配子串

c++ - 这是在 C++ 中保护字符串的安全方法吗?

c - 上层函数