1
14
正如您所说的“(不允许-32)”,我想您知道小写字符和大写字符之间的区别是32。现在把32转换成它的二进制表示,只有一个位集。在那之后,找出一种使用 bit mask 换位子。 |
2
4
考虑大小写(0x20)之间的差异,然后对值应用适当的掩码
|
3
3
对于实际的代码,您应该是库函数,例如ToupPiver()或TooUpServer(),或者能够处理Unicode复杂度的东西。 |
4
2
|
5
1
本例假设字符串是ASCII格式的,并使用英文字母表。 这是C99 C代码,编译时应该使用正确的编译器标志来设置它。我特别尝试在这个例子中不使用任何libs,不管是否标准,因为我猜您仍然在学习C编程的基础知识。
它利用了这样一个事实:ASCII表中大写字符和小写字符之间的唯一区别是一个位。特别是第6位(从右边)。我们要做的就是创建一个“掩码”,其中包含除第6位(从右边)以外的所有1,然后使用二进制和指令(&)将此掩码应用于我们的字符。然后把这个放进我们的绳子里。 下面是一个python示例。
在我看来,这是在c中创建一个ASCII字符串(或单个ASCII字符)大写的最好方法。当然,除非您希望返回一个新字符串,即您希望创建“旧”字符串的大写版本,但仍然能够将原始版本保留在某个地方。如果你理解我的第一个例子,这应该不难做到。只需分配一个新数组来放入大写字符串,并返回指向该数组的指针(无符号字符*)。 |
6
0
|
7
0
从拉丁字母的ASCII码中减去32的操作将第5位从1翻转到0。 |
8
0
正如你所说,你的家庭作业没有很好的定义。C标准对源或执行字符集的特定编码一无所知,特别是它不假定任何接近ASCII的内容。 所以wnoise是对的 处理这些问题的标准方法是为这种效果提供的预定义函数和宏。 |
9
-1
尝试使用0xDF(十六进制)或011011111二进制 |
Community wiki · C中有哪些耗时的操作? 1 年前 |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |