金沙注册网站-新金沙官网 金沙注册网站 求懂得进来看看,指向结构的指针

求懂得进来看看,指向结构的指针

#include<stdio.h>
#include<ctype.h>
#include<string.h>
#define MAXWORD 100
int getword(char * ,int);
struct key *binsearch(char *,struct key *,int );
main()
{
    char word[MAXWORD];
    struct key *p;
    while(getword(word,MAXWORD)!=EOF)
        if(isalpha(word[0])
            if((p=binsearch(word,keytab,NKEYS))!=NULL)
                p->count++;
    for(p=keytab;p<keytab+NKEYS;p++)
        if(p->count>0)
            printf(“%4d %sn”,p->count,p->word);
    return 0;
}
  
/*binsearch
函数:在tab[0]………tab[n-1]中查找与读入单词匹配的元素*/
struct key *binsearch(char *word,struct key *tab,int n)
{
    int cond;
    struct key *low =&tab[0];
    struct key *high=&tab[0];
    struct key *mid;
    while(low<high)
    {
        mid=low+(high-low)/2;/**************************为什么?*/
        /****注意为什么不是mid=(high+low)/2*****************/
        if((cond=strcmp(word,mid->word))<0)
            high=mid;
        else if(cond>0)
            low=mid+1;
        else
            return mid;
    }
    return NULL;
}

C语言,一个完整的比较简单的程序,但要求改进,求懂得进来看看,多谢
是这样的,今天看书看到一道程序题,目标是关键字统计,然后给出原来的程序要求改进。
可是坑爹的答案竟然是略,所以前来请教一下各位的高见。
我发现这个程序如果输入的字符太长时会异常终止,所以我想拿这个改进,但奈何功力不够,无从下手。
希望各位能给点建议,如果你有更好的建议,也可以提出来,不过希望可以给一个解释一下,毕竟刚入坑不久,有些思路我跟不上,下面是程序:
#include
#include
#include
#include

#define TABLESIZE 32 /*c语言关键字字数*/
#define MAXWORD 63 /* 标识符最大长度*/

struct key
{
char word;/ C语言关键字数*/
int count; /* 标识符最大长度 */
};

/* C语言关键字列表,出现次数初始化为0*/
struct key keyTable [] = {
“auto”, 0,
“break”,0,
“case”, 0,”char”, 0, “const”, 0, “continute”, 0,
“defaule”, 0, “do”, 0, “double”, 0,
“else”, 0, “enum”, 0, “extern”, 0,
“float”, 0,”for”, 0,
“goto”, 0,
“if”, 0,”int”, 0,
“long”, 0,
“register”, 0, “return”, 0,
“short”, 0, “signed”, 0,”sizeof”, 0, “static”, 0,
“switch”, 0,
“typedef”, 0,
“union”, 0, “unsigned”, 0,
“void”, 0, “volatile”, 0,
“while”, 0
};

/*函数声明*/
int GetIdent(FILE *fp, char *word, int lim);
void InComment;
void InQuote(int c, FILE *fp);
int Search(const char *word, struct key tab[], int n);
void Display;

/* 主程序*/
int main (int argc, char *argv[])
{
int n;
char word[MAXWORD];
FILE *fp;

/* 检查命令行的参数个数 */
if (argc != 2)
{
printf(“Usage: keyword Filenamen”);
exit ;
}

/* 打开文件 */if ((fp = fopen(argv[1], "r")) == NULL){ printf("keyword: can't open%sn",argv[1]); exit;}/*统计关键字*/while (GetIdent(fp, word, MAXWORD) != EOF){ /* 所有C关键字均以字母开头*/ if (isalpha { /* 可以用折半查找Bsearch函数替换Search函数 */ if ((n = Search(word, keyTable, TABLESIZE)) >=0) { keyTable[n].count++; } }}/*关闭文件*/fclose;/*输出显示统计结果*/Display();

}
/* 提取标识符*/
int GetIdent(FILE *fp, char *word, int lim)
{
int c, n;
char *w = word;

while (isspace(c = fgetc{;} /*跳过空格,制表符,换行符 *//*标识符或宏*/if (isalpha || c =='_' || c == '#'){ *w =c ; while (lim > 0) { w++; *w = fgetc; if (!isalnum && *w != '_') { ungetc; break; } lim--; }}else if(c == ''' || c == '"') /*单引号和双引号*/{ InQuote;}else if  /* 注释 */{ if ((n = fgetc == '*') { InComment; }else { ungetc; }}*w = '';return c;

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图