使用指针数组实现。因为他比较社和指向若干个字符串。
#undef main
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#pragma warning(disable:4996)
int binary(char *ptr[], char *str, int n);
void insert(char *ptr[], char *str, int n, int i);
int mian()
{
char * temp, *ptr1[6];
int i;
printf("请为字符型指针数组附初值");
for (i = 0; i < 5; i++)
{
ptr1[i] = (char*)malloc(20);
scanf("%s", ptr1[i]);
}
ptr1[5] = (char*)malloc(20);
printf("\n");
printf("original string :\n");
for (i = 0; i < 5; i++)
printf("%s\n", ptr1[i]);
printf("\ninput serach string :\n");
temp = (char *)malloc(20);
scanf("%s", temp);
i = binary(ptr1, temp, 5);
printf("output string :\n");
for (i = 0; i < 6; ++i)
{
printf("%s\n", ptr1[i]);
}
system("pause");
return 0;
}
int binary(char *ptr[], char *str, int n)
{
int hig, low, mid;
low = 0;
hig = n-1;
if (strcmp(str, ptr[0]) < 0)
return 0;
if (strcmp(str, ptr[hig]) > 0)
return n;
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;
}
return low;
}
void insert(char * ptr[], char *str, int n, int i)
{
int j;
for (j = n; j >= i; j--)
{
strcpy(ptr[j], ptr[j - 1]);
if (j == i)
{
strcpy(ptr[j], str);
}
}
//strcpy[ptr[j], str];
}