您的位置:

c语言做标记,c语言 标记

本文目录一览:

c语言中做标记的技巧

#includestdio.h

int main()

{

int list[100],n,i,j,from=0,to=0,flag=0,count=0;

scanf("%d",n);

for(i=0;in;i++)

{

scanf("%d",list[i]);

}

for(i=0;in-1;i++)

{

for(j=i;jn-1;j++)

if(list[j]==list[j+1])

count++;

else break;

if(countflag)

{

from=i;to=j;

i=j+1;

flag=count;

count=0;

}

}

if(flag==0) printf("No equal number list.\n");

else printf("The longest equal number list is from %d to %d.\n",from,to);

getch();

}

怎么样用c语言编写文法压缩用加标记法实现

基本方法是

从识别符号向终结符过度时,从含有识别符号的规则入手,寻找所有规则中左部为识别符号的规则,然后搜索这些找到的规则的右部是否含有非终结符,若含有则从所有规则中找出左部为这个非终结符的规则,并标记,当搜完第一次后,循环查找具有标记的规则,按照上面的方式继续标记剩下的规则,直到没有新的规则被标记 退出 删除未标记的规则体

反方向同理……

说什么都不如看代码 下面是我写文法压缩时候写的压缩函数

void Mylist::condense(char spot,CString gettofun)

{

//condense with spot way

addsignal(spot,1);

for(int i=1;i7;i++)

{

for(int j=0;jcount;j++)

{

if(readsignal(j)==i)

{

int rightlength=findright(j).GetLength();

for(int k=0;krightlength;k++)

{

if(gettofun.Find(findright(j).GetAt(k))!=-1)

{

addsignal(findright(j).GetAt(k),i+1);

}

}

}

}

}

// unsigned the wordrule like s::=s*

bool caiding=false;

for(int j=0;jcount;j++)

{

int rightlength=findright(j).GetLength();

for(int k=0;krightlength;k++)

{

if(findleft(j)!=findright(j).GetAt(k))

caiding=true;

}

if(caiding==false)

{signal(j,0);}

}

//format every node have been signed

for(int m=0;mcount;m++)

{

if(readsignal(m)!=0)

{

signal(m,1);

}

}

//decide which to begin

for(m=0;mcount;m++)

{

if((gettofun.FindOneOf(findright(m))==-1)(readsignal(m)!=0))

{

signal(m,2);

}

}

//right way condense

int q=2;

for(int worry=0;worry10;worry++){

for(int j1=0;j1count;j1++)

{

if(readsignal(j1)==q)

{

for(int i1=0;i1count;i1++){

//int right=findright(i1).GetLength();

for(int i2=0;i2findright(i1).GetLength();i2++)

{

if(findleft(j1)==findright(i1).GetAt(i2))

{

signal(i1,q);

}

}

}

}

}//^

}

}

这里说明一下

其中的findright(int i) 函数的功能是从第i条文法规则中找到它的右部 返回值为CString类型

signal(int i,int j)函数 是在第i条规则中找到它的标志位(即加标记)并把j放入这个标志位 以示本条规则已经做好了标记

addsignal(char i,int j) 则是找到左部名为i的规则,并标记他的标志位为j addsignalright同理

本函数传递进来的有两个参数 其中spot是识别符号Z,CString类型的是终结符号队列,包含所有已知的终结符号

在说明一点 wordrule是一个文法体class的对象 它是一个链表 每一个结点(node)为一个规则:

class node

{

public:

char leftwords;

int signal;

CString rightwords;

node *next;

public:

node(char,CString);

virtual ~node();

};

希望对你有所帮助

c语言如何在整数数组中做记号?

这个没有,c++标准库中vector可以使用迭代器vector的end()函数返回指向vector尾部迭代器的下一位置。

如果你想实现这一功能,可以自定义一个index,或者指针ptr,来指向当前数组最后一个元素的下一位置。当然您需要自己维护这个变量。插入,删除(模拟的删除咯)等操作都需要修改这一变量。

c语言中的EOF标记怎么用?

EOF一般作为文件的结尾标记。其值是-1,也就是说在stdio.h如下定义#define

EOF

-1

-1对应着ctrl+Z,在有些系统也对应着f6键。

文件的结尾都有EOF,因此可以用如下程序显示一个文件的内容:

char

c;

FILE

*fp;

fp

=

fopen("filename.txt",

"rt");

while((c=fgetc(fp)!=EOF)putchar(c);

也可以如下写:

while((c=fgetc(fp)!=-1)putchar(c);

.