c语言有点难,有点难

还需要实现dtb函数(将字符数组格式的十进制转换成字符数组格式的二进制)

#include
#include
#include
#define _KEY_WORD_END "waiting for your expanding"
typedef struct{
    int typenum;
    char * word;
}WORD;
char input[255];
char token[255]="";
int p_input;
int p_token;
char ch;
char * rwtab[]={"begin","if","then","while","do","end",_KEY_WORD_END};
WORD *scaner();
int main(){
    int over=1;
    WORD* oneword=new WORD;
    printf("Enter Your words (end with #):");
    scanf("%[^#]s",input);
    p_input=0;
    printf("Your words:\n%s\n",input);
    while(over<1000&&over!=-1){
        oneword=scaner();
        if(oneword->typenum<1000)
        printf("(%d,%s)",oneword->typenum,oneword->word);
        over =oneword->typenum;
    }
    printf("\npress # to exit:");
    scanf("%[^#]s",input);
}
char m_getch(){
    ch=input[p_input];
    p_input=p_input+1;
    return(ch);
}
void getbc(){
    while(ch==' '||ch==10){
        ch=input[p_input];
        p_input=p_input+1;
    }
}
void concat(){
    token[p_token]=ch;
    p_token=p_token+1;
    token[p_token]='\0';
}
int letter(){
    if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')return 1;
    else return 0;
}
int digit(){
    if(ch>='0'&&ch<='9')return 1;
    else return 0;
}
int reserve(){
    int i=0;
    while(strcmp(rwtab[i],_KEY_WORD_END)){
        if(!strcmp(rwtab[i],token)){
            return i+1;
        }
        i=i+1;
    }
    return 10;
}
void retract(){
        p_input=p_input-1;
}
char *dtb(){
    return NULL;
}
WORD *scaner(){
        WORD* myword=new WORD;
        myword->typenum=10;
        myword->word="";
        p_token=0;
        m_getch();
        getbc();
        if(letter()){
            while(letter()||digit()){
                concat();
                m_getch();
            }
            retract();
                myword->typenum=reserve();
                myword->word=token;
                return(myword);
        } else if(digit()){
            while(digit()){
                concat();
                m_getch();
            }
                retract();
                myword->typenum=20;
                myword->word=token;
                return(myword);
        }else switch(ch){
            case '=': m_getch();
            if(ch=='='){
                myword->typenum=39;
                myword->word="==";
                return(myword);
            }
                retract();
                myword->typenum=21;
                myword->word="=";
                return(myword);
                break;
            case '+':    myword->typenum=22;
                        myword->word="+";
                        return(myword);
                break;
            case '-':    myword->typenum=23;
                        myword->word="-";
                        return(myword);
                break;
            case '*':    myword->typenum=24;
                        myword->word="*";
                        return(myword);
                break;
            case '/':    myword->typenum=25;
                        myword->word="/";
                        return(myword);
                break;
            case '(':    myword->typenum=26;
                        myword->word="(";
                        return(myword);
                break;
            case ')':    myword->typenum=27;
                        myword->word=")";
                        return(myword);
                break;
            case '[':    myword->typenum=28;
                        myword->word="[";
                        return(myword);
                break;
            case ']':    myword->typenum=29;
                        myword->word="]";
                        return(myword);
                break;
            case '{':    myword->typenum=30;
                        myword->word="{";
                        return(myword);
                break;
            case '}':    myword->typenum=31;
                        myword->word="}";
                        return(myword);
                break;
            case ',':    myword->typenum=32;
                        myword->word=",";
                        return(myword);
                break;
            case ':':    myword->typenum=33;
                        myword->word=":";
                        return(myword);
                break;
            case ';':    myword->typenum=34;
                        myword->word=";";
                        return(myword);
                break;
            case '>': m_getch();
            if(ch=='='){
                    myword->typenum=37;
                        myword->word=">=";
                        return(myword);
            }
                retract();
                myword->typenum=35;
                myword->word=">";
                return(myword);
                break;
            case '<': m_getch();
            if(ch=='='){
                    myword->typenum=38;
                        myword->word="<=";
                        return(myword);
            }
                retract();
                myword->typenum=36;
                myword->word="<";
                return(myword);
                break;    
            case '!': m_getch();
            if(ch=='='){
                    myword->typenum=40;
                        myword->word="!=";
                        return(myword);
            }
                retract();
                myword->typenum=-1;
                myword->word="ERROR";
                return(myword);
                break;
            case '\0': myword->typenum=1000;
                        myword->word="OVER";
                        return(myword);
            break;
            default: 
                myword->typenum=-1;
                myword->word="ERROR";
                return(myword);
            
                
        }
}




































测试数据

img

写了个dtob()函数和示例,供参考:

char* dtob(int n, char* bstr)
{
    if (n >= 2)
        bstr = dtob(n / 2, bstr);
    *bstr++ = n % 2 + '0';
    *bstr = '\0';
    return  bstr;
}
int main()
{
    char b[16], * s;
    int  n;
    scanf("%d", &n);
    dtob(n, b);
    s = b;
    printf("s:%s,  b:%s", s, b);
    return 0;
}

我也感觉有点难

我天,你这走远了,一个char[][4]的二维数组就可以储存中文,c语言很简单的。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^