论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Photoshop教程
Tag:photoshop cs,照片,非主流,水晶,效果,画笔,圣诞,滤镜,艺术,手绘,蒙版,抠图,风景,特效,人像,矢量,国画,图像,数码,合成,玻璃,美女,图案,鼠绘,调色,婚纱,插画,图层,山水,漫画,透明,水粉,光线,笔刷,工具,实例,入门,人物,头发,签名,视频,壁纸,水墨,相框,海报,立体,动画,文字,换头,视频教程

C语言教程;指针数组(二)

文章类别:Photoshop | 发表日期:2010-11-19 9:09:30

C语言教程;指针数组(二)

[例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;
inti,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);
elseprintf("nosuccesful!\n");
return;
}
char *binary(char *ptr[],char *str,int定n)义返回字符指针的函数*/
{/*折半查找*/
inthig,low,mid;
low=0;
hig=n-1;
while(low<=hig)
{
mid=(low+hig)/2;
if(strcmp(str,ptr[mid])<0)
hig=mid-1;
elseif(strcmp(str,ptr[mid])>0)
low=mid+1;
else return(str);/*查帐成功,返回被查字符串*/
}
return NULL; / *查找失败,返回空指针* /
}

 

[例6-26] 在一个已排好序的字符串数组中,插入一个键盘输入的字符串,使其继续保持有序。
在上述程序查找成功的基础上,我们将该字符串插入到字符数组中。插入的位置可以是数组头、中间或数组尾。查找的算法采用折半算法,找到插入位置后,将字符串插入。
#include <stdlib.h>
#include <alloc.h>
#include <string.h>
#include <stdio.h>
m a i n ( )
{
int binary(); / *查找函数声明* /
void insert(); / *插入函数声明* /
char *temp,*ptr1[6];
int i,j;
for (i=0;i<5;i++)
{

ptr1[i]=malloc(20);/*为指针分配地址后*/
gets(ptr1[i]);/*输入字符串*/
}
ptr1[5]=malloc(20);
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=binary(ptr1,temp,5)/*;寻找插入位置i*/
printf("i=%d\n",i);
insert(ptr1,temp,5,i);/*在插入位置i处插入字符串*/
printf("outputstrings:\n");
for(i=0;i<6;i++)/*输出指针数组的全部字符串*/
printf("%s\n",ptr1[i]);
return;
}
intbinary(char*ptr[],char*str,intn)
{/*折半查找插入位置*/
int hig,low,mid;
low=0;
hig=n-1;
if(strcmp(str,ptr[0])<0)return0;
/*若插入字符串比字符串数组的第0个小,则插入位置为0*/
if(strcmp(str,ptr[hig])>0)returnn;
/*若插入字符串比字符串数组的最后一个大,则应插入字符串数组的尾部*/
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(mid);/*插入字符串与字符串数组的某个字符串相同*/
}
returnlow;/*插入的位置在字符串数组中间*/
}
void insert(char*ptr[],char*str,intn,inti)
{
int j;
for(j=n;j>i;j--)/*将插入位置之后的字符串后移*/
strcpy(ptr[j],ptr[j-1]);
strcpy(ptr[i],str);将被插字符串按字典顺序插入字符串数组*/
}
在程序中,字符串数组的6个指针均分配存放20字节的有效地址。语句ptr1[5]=malloc(20)保证插入字符串后,也具有安全的存储空间,字符串的长度以串中最长的为基准向系统申请存储空间,以保证在串的移动中有足够的存储空间。

 

 进入C语言视频教程专区

 
视频教程列表
文章教程搜索
 
Photoshop推荐教程
Photoshop热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058