stringutils.c
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:2k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * stringutils.c
  4.  *   simple string manipulation routines
  5.  *
  6.  * Copyright (c) 1994, Regents of the University of California
  7.  *
  8.  *
  9.  * IDENTIFICATION
  10.  *   $Header: /usr/local/cvsroot/pgsql/src/bin/psql/stringutils.c,v 1.16 1999/02/13 23:20:41 momjian Exp $
  11.  *
  12.  *-------------------------------------------------------------------------
  13.  */
  14. #include <stdio.h>
  15. #include <string.h>
  16. #include <ctype.h>
  17. #include <stdlib.h>
  18. #include "postgres.h"
  19. #ifndef HAVE_STRDUP
  20. #include "strdup.h"
  21. #endif
  22. #include "stringutils.h"
  23. /* all routines assume null-terminated strings! */
  24. /* The following routines remove whitespaces from the left, right
  25.    and both sides of a string */
  26. /* MODIFIES the string passed in and returns the head of it */
  27. #ifdef NOT_USED
  28. static char *
  29. leftTrim(char *s)
  30. {
  31. char    *s2 = s;
  32. int shift = 0;
  33. int j = 0;
  34. while (isspace(*s))
  35. {
  36. s++;
  37. shift++;
  38. }
  39. if (shift > 0)
  40. {
  41. while ((s2[j] = s2[j + shift]) != '')
  42. j++;
  43. }
  44. return s2;
  45. }
  46. #endif
  47. char *
  48. rightTrim(char *s)
  49. {
  50. char    *sEnd,
  51.    *bsEnd;
  52. bool in_bs = false;
  53. sEnd = s + strlen(s) - 1;
  54. while (sEnd >= s && isspace(*sEnd))
  55. sEnd--;
  56. bsEnd = sEnd;
  57. while (bsEnd >= s && *bsEnd == '\')
  58. {
  59. in_bs = (in_bs == false);
  60. bsEnd--;
  61. }
  62. if (in_bs && *sEnd)
  63. sEnd++;
  64. if (sEnd < s)
  65. s[0] = '';
  66. else
  67. s[sEnd - s + 1] = '';
  68. return s;
  69. }
  70. #ifdef NOT_USED
  71. static char *
  72. doubleTrim(char *s)
  73. {
  74. strcpy(s, leftTrim(rightTrim(s)));
  75. return s;
  76. }
  77. #endif
  78. #ifdef STRINGUTILS_TEST
  79. void
  80. testStringUtils()
  81. {
  82. static char *tests[] = {" goodbye  n", /* space on both ends */
  83. "hello world", /* no spaces to trim */
  84. "", /* empty string */
  85. "a", /* string with one char */
  86. " ", /* string with one whitespace */
  87. NULL_STR};
  88. int i = 0;
  89. while (tests[i] != NULL_STR)
  90. {
  91. char    *t;
  92. t = strdup(tests[i]);
  93. printf("leftTrim(%s) = ", t);
  94. printf("%sENDn", leftTrim(t));
  95. t = strdup(tests[i]);
  96. printf("rightTrim(%s) = ", t);
  97. printf("%sENDn", rightTrim(t));
  98. t = strdup(tests[i]);
  99. printf("doubleTrim(%s) = ", t);
  100. printf("%sENDn", doubleTrim(t));
  101. i++;
  102. }
  103. }
  104. #endif