`
orcl_zhang
  • 浏览: 234685 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

c回顾

    博客分类:
  • c
阅读更多
   自打大学毕业后就没有再看过C,今天拿本c的书看了一点,温习下一些基础知识.
一, 一个在逆波兰运算中遇到的预读的函数.
  
#include <ctype.h>
#define NUMBER '0' /* signal that a number was found */
int getch(void);
void ungetch(int);
/* getop: get next character or numeric operand */
int getop(char s[])
{
   int i, c;
   while ((s[0] = c = getch()) == ' ' || c == '\t')
       ;
   s[1] = '\0';
   if (!isdigit(c) && c != '.')
       return c;    /* not a number */
   i = 0;
  if (isdigit(c))   /* collect integer part */
     while (isdigit(s[++i] = c = getch()))
        ;
  if (c == '.')     /* collect fraction part */
     while (isdigit(s[++i] = c = getch()))
        ;
  s[i] = '\0';
  if (c != EOF)
     ungetch(c);
  return NUMBER;
}

#define BUFSIZE 100
char buf[BUFSIZE];    /* buffer for ungetch */
int bufp = 0;        /* next free position in buf */
int getch(void) /* get a (possibly pushed-back) character */
{
   return (bufp > 0) ? buf[--bufp] : getchar();
}
void ungetch(int c) /* push character back on input */
{
   if (bufp >= BUFSIZE)
       printf("ungetch: too many characters\n");
   else
       buf[bufp++] = c;
}

二,拷贝字符串
/* strcpy: copy t to s; array subscript version */
void strcpy(char *s, char *t)
{
   int i;
   i = 0;
   while ((s[i] = t[i]) != '\0')
       i++;
}

/* strcpy: copy t to s; pointer version */
void strcpy(char *s, char *t)
{
   int i;
   i = 0;
   while ((*s = *t) != '\0') {
       s++;
       t++;
   }
}

/* strcpy: copy t to s; pointer version 2 */
void strcpy(char *s, char *t)
{
   while ((*s++ = *t++) != '\0')
       ;
}

三,进栈,出栈
*p++ = val  /*入栈*/
val = *--p  /*出栈*/
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics