strlen()和swap() 两个函数的实现(特定条件下)。
2011-07-21 12:37
330 查看
/************************** @author: weedge @date: 21/07/2011 @comment: 1.不用局部变量和全局变量实现strlen; 参考http://www.cppblog.com/ant/archive/2007/10/12/32886.html 2.有2数据,写一个交换数据的宏 *******************************************/ #include <iostream> using namespace std; //========================swap=================================== /*不能处理浮点数*/ #define swap1(a,b) {a=a^b;b=a^b;a=a^b;} /*会出现溢出情况*/ #define swap11(a,b) {a=a+b;b=a-b;a=a-b;} #define swap111(a,b) {a=a+b;b=a-b;a=a-b;} /*单精度浮点数情况*/ #define US(x) (*(unsigned*)(&x)) //按无符号数读取x所在内存单元。 #define swap2(a,b) {US(a) = US(a) ^ US(b); US(b) = US(a) ^ US(b); US(a) = US(a) ^ US(b);} /*双精度浮点数情况。*/ #define USLL(x) (*(unsigned long long*)(&x)) //按64位无符号数读取x所在内存单元。 #define swap3(a,b)\ { USLL(a) = USLL(a) ^ USLL(b);\ USLL(b) = USLL(a) ^ USLL(b);\ USLL(a) = USLL(a) ^ USLL(b);} /*用参数type声明类型。*/ #define swap4(type,a,b) {type temp;temp=a;a=b;b=temp;} /*用临时内存空间存储。根据不同处理WORD字大小机器而定。32位机sizeof(long double):12*/ #define swap5(a,b) \ { char tempBuf[12];\ memcpy(tempBuf,&a,sizeof(a));\ memcpy(&a,&b,sizeof(b));\ memcpy(&b,tempBuf,sizeof(b)); } /*用模板实现*/ template <int N> struct traits //根据字节数得到类型 { typedef void TYPE; }; template <> struct traits<sizeof(float)> //模板特化 { typedef unsigned TYPE; }; template<> struct traits<sizeof(double)> //模板特化 { typedef unsigned long long TYPE; }; template <typename T> typename traits<sizeof(T)>::TYPE &Ref(T &x) //把变量x按另一种类型解释,并返回引用 { return reinterpret_cast<typename traits<sizeof(T)>::TYPE&>(x); } template <typename T> void myswap(T &a, T &b) //类型转换 { Ref(a) = Ref(a) ^ Ref(b); Ref(b) = Ref(a) ^ Ref(b); Ref(a) = Ref(a) ^ Ref(b); } //========================strlen=================================== /*递归实现*/ int str_len(const char *str) { if(*str == '\0') return 0; else return str_len(++str)+1; } /*非递归实现*/ char * ToEnd(char * p) { while(*p != '\0') p++; return p; } int mystr_len(char *p) { return ToEnd(p)-p; } int main() { int a = 1; int b = 2; float aa = 1.1; float bb = 2.2; double aaa = -1.11111; double bbb = 2.22222; swap1(a,b); swap2(aa,bb); swap3(aaa,bbb); cout<<a<<" "<<b<<endl; cout<<aa<<" "<<bb<<endl; cout<<aaa<<" "<<bbb<<endl; myswap(a,b); myswap(aa,bb); myswap(aaa,bbb); cout<<a<<" "<<b<<endl; cout<<aa<<" "<<bb<<endl; cout<<aaa<<" "<<bbb<<endl; char *str = "12345"; std::cout<<mystr_len(str)<<std::endl; //cout<<"sizeof(long double):"<<sizeof(long double)<<endl; return 0; }
[/code]
相关文章推荐
- 交换两个值函数swap()实现小结
- 9.2.利用函数swap用函数编程实现两个数组中对应元素值的交换。
- 【编程题目】请修改 append 函数,利用这个函数实现两个非降序链表的并集
- 求满足条件n=a!+b!+c!的所有三位数n 并输出,要求用自定义函数实现求阶乘(穷举法)
- 编写程序实现strlen()函数,strcmp(),strcpy(),strcat()的功能
- 1.实现一个函数,可以左旋字符串中的k个字符。 AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 2.判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1
- 写一函数,实现两个字符串的比较,即自己写一个strcmp函数
- RunTime交换两个方法,可以根据特定条件来改变.
- SendMessage、PostMessage两个函数的实现原理【转载】
- 有两个升序排列的数组A1和A2,给A1开辟的剩余内存有足够空间容纳A1,请实现一个函数,把A2中所有数字插入到A1中,并且是按照升序排列的
- 编写函数实现对两个变量的值进行交换
- 在 SQL Server 2K 中实现 大小写敏感的查询条件(WHERE ...),类似 Access(VB) 的 StrComp 函数
- asp下实现截取字符串特定部分内容函数
- 实例讲解PHP中实现代码重用的两个函数
- strlen, strcpy, strcat, strcmp, memset... (字符串操作函数的实现)
- PHP的strtolower()和strtoupper()函数在安装非中文系统的服务器下可能会导致将汉字转换为乱码,请写两个替代的函数实现兼容Unicode文字的字符串大小写转换
- java实现数组逆序的算法 使用函数两个参数
- 对GP下一个schema的满足特定条件的表赋权的函数
- 实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB
- 试题:两个基类有同名的虚函数要实现, 怎么办?