当前位置:网站首页>【C】替换空格,宏实现整数的二进制奇偶位交换
【C】替换空格,宏实现整数的二进制奇偶位交换
2022-07-28 22:06:00 【XIN-XIANG荣】
博客主页: XIN-XIANG荣
系列专栏:【从0到1,C语言学习】
一句短话:你若盛开,蝴蝶自来!
博客说明:尽己所能,把每一篇博客写好,帮助自己熟悉所学知识,也希望自己的这些内容可以帮助到一些在学习路上的伙伴,文章中如果发现错误及不足之处,还望在评论区留言,我们一起交流进步!
前言
介绍俩道基础题,使用C语言实现,题目不只文章中的一种做法,只是记录一下这些对于初学者来说不容易想到的思路!
一. 替换空格
1. 题目要求
2. 解题思路
首先求出字符串中有几个空格,
每个空格都需要用%20来替换,%20是三个字符的空间,而原来的空格只占一个字符的空间,也就是说,每有一个空格都需要增加俩个字符的空间才能够将空格替换;
用end1记录原来字符串末字符的位置,用end2记录在原来字符串末尾增加上替换空格所需要增加空间后的位置
然后将end1空间的内容赋值到end2,end1和end2再往前移动一个空间,只要end1指向的空间放置的内容不是空格,将end1空间的内容赋值到end2;
当end1指向的空间是空格时,此时end1再向前移动到空格前面字符的位置;end2此时向前移动三次,分别放置0、2、%;放置完%后end2再向前移动一位到%前面的位置;
重复上述过程直到end1和end,也就是end1和end2指向的位置重合时,所有的空格都被替换完毕。
3. 代码实现
class Solution {
public:
void replaceSpace(char* str, int length) {
char* cur = str;
int space_count = 0;
while (*cur)
{
if (*cur == ' ')
{
space_count++;
}
cur++;
}
int end1 = length - 1;
int end2 = length - 1 + 2 * space_count;
while (end1 != end2)
{
if (str[end1] != ' ')
{
str[end2--] = str[end1--];
}
else
{
end1--;
str[end2--] = '0';
str[end2--] = '2';
str[end2--] = '%';
}
}
}
};
二. 宏实现整数的二进制奇偶位交换
1. 题目要求
写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。
2. 解题思路
交换奇偶位,需要先分别拿出奇偶位。
既然是宏,分别拿出用循环不是很现实,那就用**按位与(&)**这些位的方式来做。
奇数位拿出,那就是要&上010101010101……;偶数位拿出,就是要&上101010101010……,对应十六进制分别是555……和aaa……,一般我们默认是32位整数,4位对应一位16进制就是8个5,8个a。
通过& 0x55555555的方式拿出奇数位和& 0xaaaaaaa的方式拿出偶数位。
奇数位左移(<<)一位就到了偶数位上,偶数位右移(>>)一位就到了奇数位上,最后两个数字加起来,就完成了交换。
※这个宏只能完成32位以内的整形,要想完成64位的,那就将5和a的数量翻倍即可。
3. 代码实现
#include<stdio.h>
#define SWAP_BIT(num) num = (((num&0x55555555)<<1) + ((num&0xaaaaaaaa)>>1))
int main()
{
int a = 0;
scanf("%d", &a);
printf("%d\n", SWAP_BIT(a));
return 0;
}
结语
各位小伙伴,看到这里就是缘分嘛,希望我的这些内容可以给你带来那么一丝丝帮助,可以的话三连支持一下呗!!! 感谢每一位走到这里的小伙伴,我们可以一起学习交流,一起进步!!!加油!!!
边栏推荐
- Briefly introduce the working principle and characteristics of block cipher encryption block link mode (cryptography shift cipher encryption and decryption)
- 尿酸酶丨Worthington猪肝尿酸酶的特征:
- Equipped with a new generation of ultra safe cellular batteries, Sihao aipao is available from 139900 yuan
- 浪潮ClusterEngineV4.0 远程命令执行漏洞 CVE-2020-21224
- 类中多函数填写,LeetCode919——完全二叉树插入器
- Arm-A53资料「建议收藏」
- EN 1935建筑五金.单轴铰链—CE认证
- Jincang database kingbasees client programming interface guide ODBC (5. Development process)
- websocket心跳机制(保活机制)
- YOLOV5学习笔记(一)——原理概述
猜你喜欢
尿酸酶丨Worthington猪肝尿酸酶的特征:
RHCE first day
连接池-归还连接详解(下)
阻塞式队列
The computer doesn't know what to uninstall, can't open the calculator, can't edit screenshots, can't open txt files, and so on
失败率高达80%,数字化转型如何正确完成战略规划?
【C】atoi和offsetof的介绍和模拟实现
多传感器融合定位(三)——惯性技术
Zero view h5s video platform getUserInfo information disclosure vulnerability cnvd-2020-67113
基因组 DNA 分离丨Worthington核糖核酸酶A
随机推荐
fastdfs工作原理(技术原理)
YOLOV5学习笔记(一)——原理概述
Is the declarative code of compose so concise?
脲酶丨Worthington杰克豆脲酶的特性及测定方案
The computer doesn't know what to uninstall, can't open the calculator, can't edit screenshots, can't open txt files, and so on
Compatibility description between kingbasees and Oracle (4. SQL)
零视科技 H5S视频平台 GetUserInfo 信息泄漏漏洞 CNVD-2020-67113
Ape anthropology topic 20
实时数仓:网易严选基于Flink的实时数仓实践
Pagoda phpMyAdmin unauthorized access vulnerability
多传感器融合定位(二)——基于地图的定位
Machine learning problem notes
Compatibility description between kingbasees and Oracle (3. Common functions)
Mongodb index add, view, export, delete
使用Pytorch快速训练网络模型
什么是驱动程序签名,驱动程序如何获取数字签名?
多传感器融合定位(一)——3D激光里程计
npm更换最新淘宝镜像
PHP 海报二维码合成
Worthington丨Worthington胰蛋白酶化学性质及相关研究