在C/C中使用位运算符对字符串进行大小写转换(从低到高,反之亦然)++

给定一个字符串,编写一个函数,使用位运算符&(AND),|(or),~(NOT)就地将其从小写转换为大写或从大写转换为小写,并返回该字符串。

null

我们中的许多人都知道,由于数据以二进制形式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主页上,并帮助其他极客。

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享