文字转声明: 编写程序将特定格式的输入转换为C语言声明

发布者:BlissfulJoy最新更新时间:2016-03-08 来源: eefocus关键字:文字转声明  编写程序  特定格式  C语言声明 手机看文章 扫描二维码
随时随地手机看文章
一. 程序功能
编写程序将特定格式的输入转换为C语言声明.
 
二. 程序源码
#include
#include
#include
 
#define MAXTOKEN 100
 
enum {NAME, PARENS, BRACKETS};
 
int tokentype;
char token[MAXTOKEN];
char name[MAXTOKEN];
char datatype[MAXTOKEN];
char out[1000];
int p_getch(void);
void p_ungetch(int);
 
int main(void)
{
    int type, lasttype;
    char temp[MAXTOKEN];
    
    printf("Please input(ctrl+z to quit)\n");
    while (gettoken() != EOF)
    {
        
        strcpy(out, token);
        lasttype = 0;
        while ((type = gettoken()) != '\n')
        {
            if (type == NAME)
            {
                sprintf(temp, "%s %s", token, out);
                strcpy(out, temp);    
            }    
            else
            {
                if (lasttype == '*')
                {
                    sprintf(temp, "(%s)", out);
                    strcpy(out, temp);    
                }    
                if (type == PARENS || type == BRACKETS)
                    strcat(out, token);
                else if (type == '*')
                {
                    sprintf(temp, "*%s", out);
                    strcpy(out, temp);    
                }
                else
                    printf("Error: Invalid input at %s!\n", token);
            }
            lasttype = type;
        }
        printf("%s\n",out);
    }    
 
    return 0;
}
 
int gettoken(void)
{
    int c;
    char *p = token;
    
    while ((c = p_getch()) == ' ' || c == '\t') 
        ;
        
    if (c == '(')
    {
        if ((c = p_getch()) == ')')
        {
            strcpy(token, "()");
            return tokentype = PARENS;    
        }    
        else
        {
            p_ungetch(c);
            return tokentype = '(';    
        }
    }
    else if (c == '[')
    {
        for (*p++ = c; (*p++ = p_getch()) != ']';)  
            ;
        *p = '\0';
        return tokentype = BRACKETS;  
    }
    else if (isalpha(c))
    {
        for (*p++ = c; isalnum(c = p_getch());)
            *p++ = c;
        *p = '\0'; 
        p_ungetch(c);
        return tokentype = NAME;   
    }
    else
        return tokentype = c;
}
 
#define BUFSIZE 100
 
char buf[BUFSIZE];
int bufp = 0;
 
int p_getch(void)
{
    return (bufp > 0) ? buf[--bufp]: getchar();    
}
 
void p_ungetch(int c)
{
    if (bufp < BUFSIZE)
        buf[bufp++] = c;
    else
        printf("Error: (ungetch) Too many chars in buffer1\n");    
}
 
三. 程序小结
比如: 
输入: x * char
输出: char *x
 
输入: daytab * [13] int
输出: int (*daytab)[13]
关键字:文字转声明  编写程序  特定格式  C语言声明 引用地址:文字转声明: 编写程序将特定格式的输入转换为C语言声明

上一篇:声明转文字: 编写程序将C语言的声明转换为文字描述
下一篇:编写程序实现对输入的字符串排序(可以规定比较的字符)

推荐阅读最新更新时间:2024-03-16 14:46

学习单片机编程入门方法
我写这篇文章,是我在百度看到很多想接触单片机或者已经接触单片机的人,不知道怎么入门,或者不知道第一步怎么走。我也是把我的经验写出来,这次的只不过针对的是想接触单片机的,刚接触单片机的,一开始都会存在几个疑问。 1.学习单片机的需要什么基础。 2.开始怎么入手 3.需不需要买开发板。 主要就存在这几个疑问,我也在这里为大家说说,大家只不过在交流,小弟在这里献丑啦,如有什么说的不周到的,或者不全面的,也请高手多多指教。我写这个目的是希望给更多的想学习单片机,热爱电子设计的人提供一些帮助。闲话少说,进入正题。 学习单片机一开始首要认为是通读一遍书,这个很重要了解它是什么原理,还有能实现那些功能,例如外部中断,定时器等等吧~!这些都是理
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved