本文参考该作者文章:
作者:Hawstein
出处:http://hawstein.com/posts/ctci-solutions-contents.html
一.
C语言运算符优先级:http://www.cnblogs.com/xiehy/archive/2010/02/04/1663825.html
优先级 |
运算符 |
含 义 |
要求运算 对象的个数 |
结合方向 |
1 |
() [] -> . |
圆括号 下标运算符 指向结构体成员运算符 结构体成员运算符 |
|
自左至右 |
2 |
! |
逻辑非运算符 |
1 (单目运算符) |
自右至左 |
~ |
按位取反运算符 |
|||
++ |
自增运算符 |
|||
-- |
自减运算符 |
|||
- |
负号运算符 |
|||
(类型) |
类型转换运算符 |
|||
* |
指针运算符 |
|||
& |
地址与运算符 |
|||
sizeof |
长度运算符 |
|||
3 |
* / % |
乘法运算符 除法运算符 求余运算符 |
2 (双目运算符) |
自左至右 |
4 |
+ - |
加法运算符 减法运算符 |
2 (双目运算符) |
自左至右 |
5 |
<< >> |
左移运算符 右移运算符 |
2 (双目运算符) |
|
6 |
< <= > >= |
关系运算符 |
2 (双目运算符) |
自左至右 |
7 |
== != |
等于运算符 不等于运算符 |
2 (双目运算符) |
自左至右 |
8 |
& |
按位与运算符 |
2 (双目运算符) |
自左至右 |
9 |
^ |
按位异或运算符 |
2 (双目运算符) |
自左至右 |
10 |
| |
按位或运算符 |
2 (双目运算符) |
自左至右 |
11 |
&& |
逻辑与运算符 |
2 (双目运算符) |
自左至右 |
12 |
|| |
逻辑或运算符 |
2 (双目运算符) |
自左至右 |
13 |
? : |
条件运算符 |
3 (三目运算) |
自右至左 |
14 |
= += -= *= /= %= >>= <<= &= ^= |= |
赋值运算符 |
2 |
自右至左 |
15 |
, |
逗号运算符 |
|
自左至右 |
运算符优先级记忆方法:
二.
Q:设计算法并写出代码,移除字符串中重复的字符,不能使用额外的缓存空间。注意: 可以使用额外的一个或两个变量,但不允许额外再开一个数组拷贝。
CODE:
1 #include<stdio.h> 2 #include<string.h> 3 #include<memory.h> 4 //不用额外数组。 5 //每访问一个i,就遍历一遍i+1至len之间的元素,将与s[i]元素相同的标记为NUL。 6 //将不重复的元素放到原数组中,末尾补NUL。 7 void removeDuplicate(char s[]) 8 { 9 int len=strlen(s); 10 if(len<2) return; 11 int i=0,j=0,p=0; 12 for(;i<len;i++) 13 { 14 if(s[i]!='