给定一个字符串,编写一个函数,使用位运算符&(AND),|(or),~(NOT)就地将其从小写转换为大写或从大写转换为小写,并返回该字符串。
我们中的许多人都知道,由于数据以二进制形式0和1存储,因此逐位操作比对编译器执行算术运算要快。
例如:
Input : "LowerToUpPer" Output : "LOWERTOUPPER" Letters already in the uppercase remains the same. while rest get converted to uppercase. Input : "UPPerTOloweR" Output : "uppertolower" Letters already in the lowercase remains the same. while rest get converted to lowercase.
1.从小写到大写 该方法简单地从小写字母的ASCII值中减去一个32的值,通过按位和(&)与32的否定(~)将字母转换为大写字母。
// C++ program to convert a string from // lower to upper case. #include<stdio.h> const int x = 32; // Converts a string to uppercase char *toUpperCase( char *a) { for ( int i=0; a[i]!= ' ' ; i++) a[i] = a[i] & ~x; return a; } // Driver Code int main() { char str[] = "SanjaYKannA" ; //Here it's recommended to use character array //as it's stored in read-write area. //If a pointer is used it's stored //in read-only memory as a string literal. printf ( "%s" , toUpperCase(str)); return 0; } |
输出:
SANJAYKANNA
2.大写至小写 类似地,它通过按位ORing(|)将大写字母的ASCII值加上32,并将字母转换为小写字母。
// C++ program to convert a string from // upper to lower case. #include<stdio.h> const int x = 32; // Converts a string to lowercase char * toLowerCase( char *a) { for ( int i=0; a[i]!= ' ' ; i++) a[i] = a[i] | x; return a; } // Driver Code int main() { char str[] = "SanjaYKannA" ; printf ( "%s" , toLowerCase(str)); return 0; } |
输出:
sanjaykanna
说明: 这个 ASCII表 以这样的方式构造,小写字母的二进制表示几乎与大写字母的二进制表示相同。
字符“A”是整数65=(0100 0001)2,而字符“A”是整数97=(0110 0001)2。 “a”和“a”的ASCII值之差为32。
因此,我们可以很容易地改变字母的大小写,无论是从上到下,还是从下到上,都可以通过使用如上所示的位运算符来增加或减少字母之间的差异。
练习: 实现一个函数,可以更改字符串的大小写,使geeksforgeks变为geeksforgeks。
本文由 桑杰·库马尔·乌尔沙 从…起 海得拉巴JNTUH工程学院 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。