| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1031 人关注过本帖
标题:用一个函数输入字符串后,希望利用另一个函数显示,怎么显示不出来?
只看楼主 加入收藏
啡因
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2014-4-17
结帖率:12.5%
收藏
已结贴  问题点数:10 回复次数:3 
用一个函数输入字符串后,希望利用另一个函数显示,怎么显示不出来?
程序代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 100 
#define MAXSIZE 100
char vn[N];
char vt[N];
char X[N];
int Y[N];
char str[N];
int scount,vn_num,vt_num;
int first[N][N];
int fellow[N][N];
int select[N][N];
typedef struct wenfa
{    char ca[6];
}elemtype;
typedef struct LL_1
{    elemtype data[MAXSIZE];
    int last;
}test;
//函数声明
int menu();    
void input(test *L);
void count(test *L);
void operate0();

void operate(char c);
void isnull(test *L);
void disp1();
void disp0(test *L);
void main ()
{    int ichoose;
    test *L;
    L=(test*)malloc(sizeof(test));
    L->last=-1;
    input(L);
    operate0();
    count(L);
    while(ichoose!=7)
    {    ichoose=menu();
        switch(ichoose)
        {    case 0 :disp0(L);break;
            case 1 :isnull(L);disp1(); break;
            case 5 :exit(0); 
        }
    }
}
int menu()            /*菜单函数*/
{    int ia,ichoose;
    system("cls");
    for(ia=0;ia<5;ia++)
        printf("\n");
    printf("            从菜单中选择一项:\n\n\n");
    printf("\t\t\t0--显示输入文法\n\n");
    printf("\t\t\t1--判空\n\n");
/*    printf("\t\t\t2--FIRST集\n\n");
    printf("\t\t\t3--FELLOW集\n\n");
    printf("\t\t\t4--SELECT集\n\n");*/
    printf("\t\t\t5--退出\n\n");
    printf("        请选择:");
    scanf("%d",&ichoose);
    return ichoose;        /*返回选择值*/
}
void input(test *L)//输入文法
{    int ia=0;
    int scount;
    printf("请输入文法个数:\n");
    scanf("%d",&scount);
    for(ia=0;ia<scount;ia++)
    {    printf("%d\t",ia);
        scanf("%s",&str[ia]);
        strcpy(L->data[ia].ca,&str[ia]);
        L->last=ia;
    }
}
void count(test *L)
{
    char ch;
    int ia,i;    
    for(ia=0;ia<scount;ia++)
    {
        for(i=0;i<(int)strlen(L->data[ia].ca);i++)
        {    int count=0;
            ch=L->data[ia].ca[i];
            if(ch>='A'&&ch<='Z')
            {
                for(int j=0;j<=vn_num;j++)
                {
                    if(ch==vn[j])
                    {    count++;
                        break;
                    }
                }
                if(count==0)
                {
                    vn[vn_num]=ch;
                    vn_num++;
                }
            }
            else if(ch>='a'&&ch<='z')
            {
                for(int j=0;j<=vt_num;j++)
                {
                    if(ch==vt[j])
                    {    count++;
                        break;
                    }
                }
                if(count==0)
                {
                    vt[vt_num]=ch;
                    vt_num++;
                }
            }
        }
    }
}
void operate0()//将first等置空
{    int ia,ib;
    for(ia=0;ia<vn_num;ia++)
        {    for(ib=0;ib<8;ib++)
            {    first[ia][ib]=0;
                fellow[ia][ib]=0;
            }
        }
        for(ia=0;ia<10;ia++)
        {    for(ib=0;ib<8;ib++)
            {
                select[ia][ib]=0;
            }
        }
}
void disp0(test *L)
{ int ia;
    for(ia=0;ia<scount;ia++)
    {
        printf("%s\n",&L->data[ia].ca);
    }
}

//判空
void operate(char c)
{    int ia;
    for(ia=0;ia<vn_num;ia++)
        if(c==vn[ia])
        {    Y[ia]=1;
            break;
        }
} 

void isnull(test *L)
{    int ib,ic,id;
    //若遇到符号"ε",检查左部非终结符状态,若不是"空",将其置为"空",继续扫描下一产生式;
    char temp1,temp2,temp3;
    for(ib=0;ib<10;ib++)
    {    if(L->data[ib].ca[3]=='@')
        {    operate(L->data[ib].ca[0]);    
        }
    }
    for(ib=0;ib<scount;ib++)
    {    for(ic=3;ic<(int)strlen(L->data[ib].ca);ic++)
        {    if(L->data[ib].ca[ic]>='a'&&L->data[ib].ca[ic]<='z')
            {    temp1=L->data[ib].ca[0];
                for(id=0;id<vn_num;id++)
                {    if(temp1==vn[id])
                        if(Y[id]==-1)
                            Y[id]=0;
                }
                break;
            }
            else if(L->data[ib].ca[ic]>='A'&&L->data[ib].ca[ic]<='Z')
            {    temp2 = L->data[ib].ca[0];
                for(id=0;id<(int)strlen(L->data[ib].ca);id++)
                {    if(temp2==vn[id])
                        if(Y[id]==-1)
                            break;
                        else if(Y[id]==0)
                        {    temp3=L->data[ib].ca[0];
                            for(id=0;id<5;id++)
                            {    if(temp3==vn[id])
                                    if(Y[id]==-1)
                                        Y[id]=0;
                                    else if(Y[id]==1)
                                        break;
                                    
                            }
                        }
                }
                break;
            }
            else if(L->data[ib].ca[ic]=='\0')
                for(id=0;id<scount;id++)
                    if(L->data[id].ca[0]==vn[id])
                    {    Y[id] = 1;
                        break;
                    }
            }
        }

}

void disp1()
{    int ia;
    printf("可以推出空的是:\n");
    for(ia=0;ia<vn_num;ia++)
    {    if(Y[ia]==1)
            printf("%c",vn[ia]);
    }
    printf("\n");
    system("pause");
}
搜索更多相关主题的帖子: 字符串 
2015-06-18 15:45
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:10 
以下是引用啡因在2015-6-18 15:45:11的发言:

用一个函数输入字符串后,希望利用另一个函数显示,怎么显示不出来?


看不出来你的代码和需求有啥关系  如果仅仅是一个函数输入 另一个函数输出  也忒容易了一些

DO IT YOURSELF !
2015-06-18 15:51
啡因
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2014-4-17
收藏
得分:0 
回复 2楼 wp231957
是一个关于LL1文法的代码,别的不管,我只是想问一下输入函数和输出函数是不是正确
2015-06-18 15:55
啡因
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2014-4-17
收藏
得分:0 
回复 2楼 wp231957
input是输入,disp0是输出
2015-06-18 15:56
快速回复:用一个函数输入字符串后,希望利用另一个函数显示,怎么显示不出来?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041929 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved