/*闲来无聊,偶尔在网上看到这么一道考试题目: 要求实现一个c函数,函数内不能使用任何新定义的变量、不能使用包括strlen在内的任何库函数,也不能使用递归方法。 看到给出的答案,不是错的就是不严谨的,包括百度知道采纳的答案。 手痒,也试一试。 */ #include <stdio.h> #include <string.h> /* 功能:字符串反转函数 要求:函数内不能使用任何新定义的变量、不能使用包括strlen在内的任何库函数,也不能使用递归方法。 关键要点: 1、充分利用 '\0' 占位符,用于缓冲及判断 2、使用异或操作交换两个变量 */ void reverse(const char *src,char *dst) { if ((src==NULL)||(*src=='\0')) { return; } *dst='\0'; //此时dst 第一个字符为'\0',用于后面计算字符串起始位置 //src 拷贝到 dst,dst 从第二个字符位置开始赋值 for (dst++;(*src)!='\0';src++,dst++) { *dst=*src; } dst--; //此时dst实际上指向最后一个字符 src=dst; //设置src 指向目标字符串的最后一个字符 //设置dst指向目标字符串的第一个字符(此时该字符为'\0') while (*dst!='\0') { dst--; } //以上操作后,得到目标字符串的首尾指针,dst 指向头部,src 指向尾部,注意此时目标字符串的第一个字符是'\0' //字符串两边两两交换,使用位异或操作 for (;dst<src;dst++,src--) { *dst^=*src; *((char*)src)^=*dst; *dst^=*src; } } //demo int main(int argc,char** argv) { char src[100]={0},dst[100]; printf("Input a source string contains not more than %u characters:",sizeof(src)); scanf("%s",src); reverse(src,dst); printf("reverse Result:%s\n",dst); }
字符串反转函数,不定义局部变量,不使用库函数,不使用递归
最新推荐文章于 2023-09-21 09:44:26 发布