half.c
上传用户:bjtelijie
上传日期:2010-01-01
资源大小:87k
文件大小:2k
源码类别:

数学计算

开发平台:

Visual C++

  1. # include <stdlib.h>
  2. # include <string.h>
  3. # include <stdio.h>
  4. void main()
  5. {
  6. /* 声明子函数 */
  7. int binary(char *ptr[], char *str, int n);    /* 查找函数声明 */
  8. void insert(char *ptr[], char *str, int n, int i);    /* 插入函数声明 */
  9. char *temp, *ptr1[6];
  10. int i;
  11. printf("请为字符形指针数组赋初值:n");
  12. for (i=0; i<5; i++)
  13. {
  14. ptr1[i] = (char *)malloc(20);    /* 为指针分配地址后 */
  15. gets(ptr1[i]);    /* 输入字符串 */
  16. }
  17. ptr1[5] = (char *)malloc(20);
  18. printf("n");
  19. printf("original string:n");
  20. for(i=0; i<5; i++)    /* 输出指针数组各字符串 */
  21. printf("%sn", ptr1[i]);
  22. printf("ninput search string:n");
  23. temp = (char *)malloc(20);
  24. gets(temp);    /* 输入被插字符串 */
  25. i=binary(ptr1, temp, 5);    /* 寻找插入位置i */
  26. printf("i = %dn", i);
  27.     insert(ptr1, temp, 5, i);    /* 在插入位置i处插入字符串 */
  28. printf("output strings:n");
  29. for(i=0; i<6; i++)    /* 输出指针数组的全部字符串 */
  30. printf("%sn", ptr1[i]);
  31. }
  32. int binary(char *ptr[], char *str, int n)
  33. /* 折半查找插入位置 */
  34. int hig, low, mid;
  35. low = 0;
  36. hig = n-1;
  37. if(strcmp(str,ptr[0]) < 0) 
  38. return 0;
  39.     /* 若插入字符串比字符串数组的第0个小,则插入位置为0 */
  40. if(strcmp(str,ptr[hig]) > 0) 
  41. return n;
  42.     /* 若插入字符串比字符串数组的最后一个大,则应插入字符串数组的尾部 */
  43.     while(low <= hig)
  44. {
  45. mid = (low + hig)/2 ;
  46. if (strcmp(str,ptr[mid]) < 0)
  47. hig = mid - 1;
  48. else if(strcmp(str,ptr[mid]) > 0)
  49. low = mid + 1;
  50. else 
  51. return mid;    /* 插入字符串与字符串数组的某个字符串相同 */
  52. }
  53. return low;    /* 插入的位置在字符串数组中间 */
  54. }
  55. void insert(char *ptr[], char *str, int n, int i)
  56. {
  57. int j;
  58. for(j=n; j>i; j--)    /* 将插入位置之后的字符串后移 */
  59. strcpy(ptr[j], ptr[j-1]);
  60. strcpy(ptr[i], str);    /* 将被插字符串按字典顺序插入字符串数组 */
  61. }