指针数组(二)

[例6-25] 对已排好序的字符指针数组进行指定字符串的查找。字符串按字典顺序排列,查找算法采用二分法,或称为折半查找。折半查找算法描述:

1.设按开序(或降序)输入n个字符串到一个指针数组。

2.设low指向指针数组的低端,high指向指针数组的高端,mid=(low+high)/2

3.测试mid所指的字符串,是否为要找的字符串。

4.若按字典顺序,mid所指的字符串大于要查找的串,表示被查字符串在low和mid之间,否则,表示被查字符串在mid和high之间。

5.修改low式high的值,重新计算mid,继续寻找。

#include <stdlib.h>
#include <alloc.h>
#include <string.h>
#include <stdio.h>
main()
{
char *binary();/*函数声明*/
char *ptr1[5],*temp;
int i,j;
for(i=0;i<5;i++)
{
ptr1[i]=malloc(20);/*按字典顺序输入字符串*/
gets(ptr1[i]);
}
printf("\n");
printf("original string:\n");
for(i=0;i<5;i++)
printf("%s\n",ptr1[i]);
printf("input search string:\n");
temp=malloc(20);
gets(temp);/输*入被查找字符串*/
i=5;
temp=binary(ptr1,temp,i);/*调用查找函数*/
if(temp)printf("succesful-----%s\n",temp);
else printf("nosuccesful!\n");
return;
}
char *binary(char *ptr[],char *str,int定n)义返回字符指针的函数*/
{/*折半查找*/
int hig,low,mid;
low=0;
hig=n-1;
while(low<=hig)
{
mid=(low+hig)/2;
if(strcmp(str,ptr[mid])<0)
hig=mid-1;
else if(strcmp(str,ptr[mid])>0)
low=mid+1;
else return(str);/*查帐成功,返回被查字符串*/
}
return NULL; / *查找失败,返回空指针* /
}

时间: 2024-10-20 12:53:33

指针数组(二)的相关文章

C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表本文由 arthinking 发表于315 天前 ⁄ itzhai.com原创文章 ⁄ C语言 ⁄ 评论数 3 ⁄ 被围观 1,775 views+   指针数组: 在一个数组中,如果它的元素全部都是指针

c++的问题-指针和二维数组的用法

问题描述 指针和二维数组的用法 int *s for(i=0;i<5;i++) for(j=0;j<5;j++) cout<<s[i][j];//error想请教各位程序员哥哥这个要怎么改啊? 解决方案 楼上的就行了,int (*s)[5][5] 也可以吧. 解决方案二: 虽然是二维的数组,其实指针的指的是第一行第一列,所以*s[i]就成了一个一维数组的指针,在c++里面你还可以试试引用,同时理解指针. 解决方案三: 首先,s在此处定义为一维,二维引用会导致错误.其次,对于s,没有

二维数组-关于C语言的指针数组的问题

问题描述 关于C语言的指针数组的问题 老师说过 传递一个二维数组时 必须指定 第二维的 个数 才能正确索引 数组1维+1的位置 函数参数传递 都是写成这样 abc(int* array[10]) 但是看到main函数的 参数确是 int main(int argc, char* argv[], char* env[]) 这样写 能索引argv+1 的位置吗? 解决方案 当然可以,C语言是一种简陋和原始的语言,它简陋的程度对于用惯了高级编程语言的人来说匪夷所思,比如你完全可以越界访问数组,至于结果

visual studio-vs2013调试中,如何通过指针监视二维动态数组的值?

问题描述 vs2013调试中,如何通过指针监视二维动态数组的值? int **p = new int *[row]; for (i = 0; i < row; i++) p[i] = new int[column]; 比如说我用上面语句创建额一个row行column列的数组,调试的时候怎样在监视窗口中,看到整个二维数组的值呢? 如果是一维的,例如int *p=new int[5]: 可以将p,5写到监视名称里,可二维的我就不知道了...求帮助 解决方案 调试状态下,调试->窗口->内存,

二级指针创建二维数组

问题描述 二级指针创建二维数组 1) 编写函数CreateMatrix( int **a,int n, int m),生成一个n行.m列的矩阵,矩阵中的元素由随即函数rand()生成(范围1~99). 解决方案 #include <stdio.h> #include <stdlib.h> #include <time.h> void CreateMatrix( int **a,int n, int m) { int i,j; a = (int**)malloc(n*si

指针数组与数组指针,指向二维数组怎么搞?

问题描述 指针数组与数组指针,指向二维数组怎么搞? 初学C,碰到一道题,是要求指针数组指向二维数组,并作为函数参数传递,这该如何指向? 请帮忙解答一下指针数组与数组指针两种不同的指向方法,感激不尽. 解决方案 这有什么难的. int a[100][100]; int * ptr[] = a; foo(ptr); 解决方案二: 应该这样吧: int a[100][100]; int (* ptr)[100] = a; foo(ptr); 解决方案三: 指向二维数组跟指向一维数组是一样的 解决方案四

C语言及程序设计提高例程-35 使用指针操作二维数组

贺老师教学链接  C语言及程序设计提高 本课讲解 使用指向二维数组元素的指针 #include <stdio.h> int main( ) { int a[3][4]= {1,3,5,7,9,11,13,15,17,19,21,23}; int *p; for(p=a[0]; p<a[0]+12; p++) { printf("%3d ",*p); } return 0; } 使用指向一维数组的指针 #include <stdio.h> int main(

《指针的编程艺术(第二版)》一3.2 指针与二维数组

3.2 指针与二维数组 指针的编程艺术(第二版) 一维数组与指针的关系前面已经介绍过.一维数组的元素值,可使用[]或一个*得到,假设有一个数组如下: int i[7] = {0, 1, 2, 3, 4, 5, 6}; int *ptr=i; 则(i+2) 或i[2] 或(ptr+2) 或ptr[2],都表示数组某一个元素的值.而二维数组(two dimension array){XE "二維陣列(two dimension)"},则需要两个,或一个与一个[ ],或两个[ ],才能得到数

求大神讲解一下指针指向二维数组时该怎么用?

问题描述 求大神讲解一下指针指向二维数组时该怎么用? 指针指向一维数组时只用*(p+n)即可,但是二维数组时候改怎么用呢? 解决方案 个人认为其实二维数组还是一维数组,没有什么区别,例如int a[3][4],就相当于int a[12].要想访问a[2][3],就用*(a+(4*2+3)*(sizeof(int))),应该是这样,不过我一般用a[4*2+3] 来访问对应的元素 本人也是菜鸟,如果有错还请大神们指正~ 解决方案二: 由于指针与数组之间可以若转化,所以在一定程度上可以理解为数组就是指

数组指针、指针数组以及二位数组的深入解析_C 语言

int *p[3]与int (*p)[3]的区别*p[3]这个是一个指针数组,它所代表的意思是数组中的每一个元素都是一个指针变量,而(*p)[3],p是一个指针变量,表示指向一个含有3个整型元素的一维数组. 复制代码 代码如下: int i,j;    int a[2][3]={3,4,5,6,7,8}; //    int *p[3] ;  //表示一个数组,数组中的元素是指针类型,一共有三个元素    int (*q)[3]; //是一个指针,指向一个含有三个int型的数组(q+1)会跳三个