|
真实答案
1)请写出实现下面功能的转换程序:
输入一个 32-bit 整数 ( 4字节 ),从高位到低位,将此整数二进制码中的模式 101 替换为 011,
将替换后结果作为返回值返回。
函数原型:long replace_pattern(long inputInt);
回答:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
long replace_pattern(long inputInt)
{
char bits[33],*p=bits,e;
long re=0,i=0;
unsigned long mask=0x80000000;
while(mask)bits[i++]=((mask&inputInt)?49:48),mask>>=1;
bits=0;
while(p=strstr(p,"101"))
{
e=*(p+3),*(p+3)=0;
strcpy(p,"011");
p+=3;
*p=e;
}
p=bits;
while(*p)re=re*2+*p-48,p++;
return re;
}
int main()
{
long n;
printf("Please Enter a Number:\n");
scanf("%ld",&n);
printf("After replace :%ld\n",replace_pattern(n));
system("PAUSE");
return 0;
}
2)完成函数 void reverse_str(unsigned char *str);
功能:将输入字符串 str 转换成 各字节顺序从尾到头排列的新字符串。
输入:str, 要被翻转处理的字符串,以 0 结尾。
输出:str, 翻转后的结果,以 0 结尾。
要求:使用最小的内存空间(数据部分)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void reverse_str(unsigned char *str)
{
int i;
unsigned char temp;
int num=0;
if(NULL == str) return;
while(str[num] != '0')
{
num++;
}
for(i=0;i<num/2;i++)
{
temp = str;
str = str[num-1-i];
str[num-1-i] = temp;
}
}
int main()
{
char *str="abcdefghijk0";
printf("Please Enter a String :%s\n",str);
reverse_str(str);
printf("After reverse :%s\n",str);
system("PAUSE");
return 0;
}
直接运行,绝对OK! |
|