这两个例子都是用了同一种编程思想:对于字符的操作,char类型最多可以有256个字符,但是可以满足对大小写、数字、其他基本字符的使用。利用字符的ascii码值作为大小为256的数组的下标,将要查找的内容/条件填充到数组里,这样通过查看对应下标的内容,即可实现相应操作。
这就是时间复杂度为O(1)的编程思想,这也是基于哈希表的一种,关于哈希表请自己查看。
下面看第一个例子:当输入小写字母a,输出大写字母Z,当输入小写字母b,输出大写字母Y,...当输入小写字母z,输出大写字母A
1 #include
2 #include
3
4 void change(char arr[],int ch){
5 int i=0;
6 int j=90;
7 for(i=97;i<123;i++){ //对arr[256]中a-z的下标里逐个放入Z-A
8 arr[i]=j--;
9 }
10 printf("%c\n",arr[ch]);
11 }
12
13 int main(){
14 char arr[256]= {0};
15 int ch =0;
16 ch=getchar();
17 change(arr,ch);
18 return 0;
19 }
第二个例子:判读一个字符在不在一个字符串里
对字符串中出现的字符对应的数组元素位置置1,当输入的字符ascii码作为下标的数组元素值为1是找到,为0时没找到。
原文:http://molova.blog.51cto.com/10594266/1702896