不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
#include<stdio.h> #include<string.h> #include<assert.h> void reverse_word(char *left,char *right)//逆序一个单词 { assert(left!=NULL); assert(right!=NULL); while(left<right) { char tmp=*left; *left=*right; *right=tmp; left++; right--; } } void reverse(char *str)//逆序一个字符串 { int len=strlen(str); char *left=str; char *right=str+len-1; char *start=str; char *end=str; reverse_word(left,right); while(*end!='\0') { start=end; while((*end!=' ')&&(*end!='\0')) { end++; } reverse_word(start,end-1); end++; } } int main() { char a[]="student a am i"; reverse(a); printf("%s\n",a); return 0; }
2.编写函数: unsigned int reverse_bit(unsigned int value);这个函数的返回 值value的二进制位模式从左到右翻转后的值。如:
在32位机器上25这个值包含下列各位: 00000000000000000000000000011001 翻转后:(2550136832) 10011000000000000000000000000000 程序结果返回: 2550136832#include<stdio.h> unsigned reverse_bit(unsigned int value) { int sum=0; int i=0; for(i=0;i<32;i++) { //sum=sum<<1; //sum+=(value>>i)&1;方法一:将二进制数的每一位取出来,每取一次sum左移一位 sum+=((value>>i)&1)<<(31-i);按照每一位的权值左移(相当于乘以2^31-i) } return sum; } int main() { int n=25; unsigned ret=reverse_bit(25); printf("%u\n",ret); return 0; }
