`
kofsky
  • 浏览: 197430 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

精致的C Code

阅读更多
  1. /* strlen:  return length of s */
  2.    int strlen(char s[])
  3.    {
  4.        int i;
  5.        while (s[i] != '\0')
  6.            ++i;
  7.        return i;
  8.    }

 

  1.  /* strlen:  return length of string s */
  2.    int strlen(char *s)
  3.    {
  4.        int n;
  5.        for (n = 0; *s != '\0', s++)
  6.            n++;
  7.        return n;
  8.    }

 

  1. /* strcpy:  copy t to s; array subscript version */
  2.    void strcpy(char *s, char *t)
  3.    {
  4.        int i;
  5.        i = 0;
  6.        while ((s[i] = t[i]) != '\0')
  7.            i++;
  8.    }
  9.    /* strcpy:  copy t to s; pointer version */
  10.    void strcpy(char *s, char *t)
  11.    {
  12.        int i;
  13.        i = 0;
  14.        while ((*s = *t) != '\0') {
  15.            s++;
  16.            t++;
  17.        }
  18.    }
  19. /* strcpy:  copy t to s; pointer version 2 */
  20.    void strcpy(char *s, char *t)
  21.    {
  22.        while ((*s++ = *t++) != '\0')
  23.            ;
  24.    }

 

  1. /* strcmp:  return <0 if s<t, 0 if s==t, >0 if s>t */
  2.    int strcmp(char *s, char *t)
  3.    {
  4.        int i;
  5.        for (i = 0; s[i] == t[i]; i++)
  6.            if (s[i] == '\0')
  7.                return 0;
  8.        return s[i] - t[i];
  9.    }

 

  1.  /* strcmp:  return <0 if s<t, 0 if s==t, >0 if s>t */
  2.    int strcmp(char *s, char *t)
  3.    {
  4.        for ( ; *s == *t; s++, t++)
  5.            if (*s == '\0')
  6.                return 0;
  7.        return *s - *t;
  8.    }

 

  1. /* squeeze:  delete all c from s */
  2.    void squeeze(char s[], int c)
  3.    {
  4.       int i, j;
  5.       for (i = j = 0; s[i] != '\0'; i++)
  6.           if (s[i] != c)
  7.               s[j++] = s[i];
  8.       s[j] = '\0';
  9.    }

 

 

  1. /* strcat:  concatenate t to end of s; s must be big enough */
  2.    void strcat(char s[], char t[])
  3.    {
  4.        int i, j;
  5.        i = j = 0;
  6.        while (s[i] != '\0'/* find end of s */
  7.            i++;
  8.        while ((s[i++] = t[j++]) != '\0'/* copy t */
  9.            ;
  10.    }

 

 

  1. // returns the (right adjusted) n-bit field of x that begins at position p
  2.  /* getbits:  get n bits from position p */
  3.    unsigned getbits(unsigned x, int p, int n)
  4.    {
  5.        return (x >> (p+1-n)) & ~(~0 << n);
  6.    }

 

 

  1. /* binsearch:  find x in v[0] <= v[1] <= ... <= v[n-1] */
  2.    int binsearch(int x, int v[], int n)
  3.    {
  4.        int low, high, mid;
  5.        low = 0;
  6.        high = n - 1;
  7.        while (low <= high) {
  8.            mid = (low+high)/2;
  9.            if (x < v[mid])
  10.                high = mid + 1;
  11.            else if (x  > v[mid])
  12.                low = mid + 1;
  13.            else    /* found match */
  14.                return mid;
  15.        }
  16.        return -1;   /* no match */
  17.    }

 

 

  1. #include <ctype.h>
  2.    /* atoi:  convert s to integer; version 2 */
  3.    int atoi(char s[])
  4.    {
  5.        int i, n, sign;
  6.        for (i = 0; isspace(s[i]); i++)  /* skip white space */
  7.            ;
  8.        sign = (s[i] == '-') ? -1 : 1;
  9.        if (s[i] == '+' || s[i] == '-')  /* skip sign */
  10.            i++;
  11.        for (n = 0; isdigit(s[i]); i++)
  12.            n = 10 * n + (s[i] - '0');
  13.        return sign * n;
  14.    }

 

 

  1. /* shellsort:  sort v[0]...v[n-1] into increasing order */
  2.    void shellsort(int v[], int n)
  3.    {
  4.        int gap, i, j, temp;
  5.        for (gap = n/2; gap > 0; gap /= 2)
  6.            for (i = gap; i < n; i++)
  7.                for (j=i-gap; j>=0 && v[j]>v[j+gap]; j-=gap) {
  8.                    temp = v[j];
  9.                    v[j] = v[j+gap];
  10.                    v[j+gap] = temp;
  11.                }
  12.    }

 

 

  1. #include <string.h>
  2.    /* reverse:  reverse string s in place */
  3.    void reverse(char s[])
  4.    {
  5.        int c, i, j;
  6.        for (i = 0, j = strlen(s)-1; i < j; i++, j--) {
  7.            c = s[i];
  8.            s[i] = s[j];
  9.            s[j] = c;
  10.        }
  11.    }
  12.  /* itoa:  convert n to characters in s */
  13.    void itoa(int n, char s[])
  14.    {
  15.        int i, sign;
  16.        if ((sign = n) < 0)  /* record sign */
  17.            n = -n;          /* make n positive */
  18.        i = 0;
  19.        do {      /* generate digits in reverse order */
  20.            s[i++] = n % 10 + '0';  /* get next digit */
  21.        } while ((n /= 10) > 0);    /* delete it */
  22.        if (sign < 0)
  23.            s[i++] = '-';
  24.        s[i] = '\0';
  25.        reverse(s);
  26.    }

 

  1.  #include <ctype.h>
  2.    /* atof:  convert string s to double */
  3.    double atof(char s[])
  4.    {
  5.        double val, power;
  6.        int i, sign;
  7.        for (i = 0; isspace(s[i]); i++)  /* skip white space */
  8.            ;
  9.        sign = (s[i] == '-') ? -1 : 1;
  10.        if (s[i] == '+' || s[i] == '-')
  11.            i++;
  12.        for (val = 0.0; isdigit(s[i]); i++)
  13.            val = 10.0 * val + (s[i] - '0');
  14.        if (s[i] == '.')
  15.            i++;
  16.        for (power = 1.0; isdigit(s[i]); i++) {
  17.            val = 10.0 * val + (s[i] - '0');
  18.            power *= 10;
  19.        }
  20.        return sign * val / power;
  21.    }

 

 

  1.  /* qsort:  sort v[left]...v[right] into increasing order */
  2.    void qsort(int v[], int left, int right)
  3.    {
  4.        int i, last;
  5.        void swap(int v[], int i, int j);
  6.        if (left >= right) /* do nothing if array contains */
  7.            return;        /* fewer than two elements */
  8.        swap(v, left, (left + right)/2); /* move partition elem */
  9.        last = left;                     /* to v[0] */
  10.        for (i = left + 1; i <= right; i++)  /* partition */
  11.            if (v[i] < v[left])
  12.                swap(v, ++last, i);
  13.        swap(v, left, last);            /* restore partition  elem */
  14.        qsort(v, left, last-1);
  15.        qsort(v, last+1, right);
  16.    }
  17.    /* swap:  interchange v[i] and v[j] */
  18.    void swap(int v[], int i, int j)
  19.    {
  20.        int temp;
  21.        temp = v[i];
  22.        v[i] = v[j];
  23.        v[j] = temp;
  24.    }

 

 

 

  1.  /* trim:  remove trailing blanks, tabs, newlines */
  2.    int trim(char s[])
  3.    {
  4.        int n;
  5.        for (n = strlen(s)-1; n >= 0; n--)
  6.            if (s[n] != ' ' && s[n] != '\t' && s[n] != '\n')
  7.                break;
  8.        s[n+1] = '\0';
  9.        return n;
  10.    }

 

 

  1. void itob(int n, char s[], int b)
  2. {
  3.     int i = 0, j , sign;
  4.     if( ( sign = n ) < 0 )
  5.         n = - n;
  6.      
  7.     do
  8.     {
  9.         j = n % b;
  10.         s[i++] = ( j <= 9 )?j+'0':j-10+'a';
  11.     }while( ( n/=b ) > 0 );
  12.     if( sign < 0 )
  13.         s[i++]='-';
  14.     s[i] = '\0';
  15.     reverse(s);
  16. }    
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics