C字符串反转算法
一个很简洁的算法:
void Reverse(char s[])
{
for(int i = 0, j = strlen(s) - 1; i < j; ++i, --j) {
char c = s[i];
s[i] = s[j];
s[j] = c;
}
}
#关于a, b交换其它算法:
a ^= b;
b ^= a;
a ^= b;
一个五种解法的版本:
转自:http://www.cnblogs.com/Mainz/articles/1164602.html
这是网络流传的Microsoft的面试题目之一:“编写反转字符串的程序,要求优化速度、优化空间”。因为最近一直很多关注算法方面的实践和研究,因此对这个问题进行了一些思考,给出了5种实现方法(有两种解法相关性比较大)。
解法一:第一次看到这题目,想到最简单、最直觉的解法就是:遍历字符串,将第一个字符和最后一个交换,第二个和倒数第二个交换,依次循环,即可,于是有了第一个解法:
char* strrev1(const char* str)
{
int len = strlen(str);
char* tmp = new char[len + 1];
strcpy(tmp,str);
for (int i = 0; i < len/2; ++i)
{
char c = tmp[i];
tmp[i] = tmp[len – i - 1];
tmp[len – i - 1] = c;
}
return tmp;
}
这里是通过数组的下标方式访问字符串的字符,实际上用指针直接操作即可。解法二正是基于此,实现代码为:
char* strrev2(const char* str)
{
char* tmp = new char[strlen(str) + 1];
strcpy(tmp,str);
char* ret = tmp;
char* p =
相关文档:
发现个全局变量与局部变量的区别:
[code=C/C++]
char** t;
main()
{
char c[1];
char** t1;
sprintf(c,"%d",t);
printf("t=%s---\n",c);
if(strcmp(c,"0")!=0)
&nbs ......
自己搜集并且整理,用于参考。
1.完整流程:
C源程序头文件-->预编译处理(cpp)-->编译程序本身-->优化程序-->汇编程序-->链接程序-->可执行文件
pic from http://edmulroy.portbridge.com/oview.htm
2. c的预处理
预编译程序所完成的基本上是对源程序的& ......
字搜索就搜索一个数中具有某些特征的位。实现如下:
/* wsearch.c:字搜索 */
/* 从左边寻找第一个0字节:第0(1,2,3)个字节是0时,返回0(1,2,3),否则返回4 */
int zbytel(unsigned x){
if((x>>24)==0) return 0;
else if((x & 0x00ff0000)==0) return 1;
else if((x & 0x0000ff00)==0) r ......
GCC 编译c程序的方法及过程解析
Justin.zp.Yang 2010.04.10
目前 Linux 下最常用的 C 语言编译器是 GCC ( GNU Compiler Collection ),它是 GNU 项目中符合 ANSI C 标准的编译系统,能够编译用 C 、 C++ 和 Object C 等语言编写的程序。 GCC 不仅功能非常强大,结构 ......