如何解析网址的IP地址

如何解析网址的IP地址,第1张

用nslookup 或者ping

C:\>ping google.com.hk

正在 Ping google.com.hk [74.125.128.105] 具有 32 字节的数据:

来自 74.125.128.105 的回复: 字节=32 时间=91ms TTL=45

来自 74.125.128.105 的回复: 字节=32 时间=95ms TTL=45

请求超时。

来自 74.125.128.105 的回复: 字节=32 时间=40ms TTL=45

74.125.128.105 的 Ping 统计信息:

数据包: 已发送 = 4,已接收 = 3,丢失 = 1 (25% 丢失),

往返行程的估计时间(以毫秒为单位):

最短 = 40ms,最长 = 95ms,平均 = 75ms

字数限制只能发上部分,你若有其它联系方法再想法发下半部分,这个程序是已通过编译的

#include <stdio.h>

#include <process.h>

#include <iostream.h>

#include <string.h>

#include <fstream.h>

class Yui_Kong //滤空格

{ char Yufa[30][30]

char k[30]

int N

public:

char Yufa0[30][30]

char Kong[30][30]

private:

void Shu_Ru()

{ cout<<endl<<"请输入文法:"<<endl<<endl

char cint i=0,j=0

c=getchar()

while(c!='#')

else Yufa[i][j++]=c

c=getchar()

}

if(j==0)Yufa[i][j]='#'

else{

Yufa[i][j]='\0'Yufa[i+1][0]='#'

}

}

void Hua_jian()

{ int i=0int ii=0,jj=0

while(Yufa[i][0]!='#')

{

for(int j=0Yufa[i][j]!='\0'j++)

{ if(j==1||j==2)

else if(Yufa[i][j]=='|')

{ Yufa0[ii++][jj++]='\0'

Yufa0[ii][0]=Yufa0[ii-1][0]

jj=1

}

else

Yufa0[ii][jj++]=Yufa[i][j]

}

Yufa0[ii][jj]='\0'

ii++jj=0

i++

}

Yufa0[ii][0]='#'

}

void Vn()//在产生式中提取非终结符

{ int i=0,ii=0,iii=0

Kong[ii++][0]=Yufa[0][0]

while(Yufa[i][0]!='#')

{

for(int j=0Yufa[i][j]!='\0'j++)

if(Yufa[i][j]>='A'&&Yufa[i][j]<='Z')

{

for(iii<iiiii++)

if(Kong[iii][0]==Yufa[i][j])break

if(iii==ii)

Kong[ii++][0]=Yufa[i][j]

iii=0

}

i++

}

Kong[ii][0]='#'

}

void Scan()//进行扫描,看各非终结符能否推出空

{

char tmp[30][30]

int i=0

for(Yufa0[i][0]!='#'i++)//把产生时拷贝到临时数组

strcpy(tmp[i],Yufa0[i])

tmp[i][0]='#'

for(int j=0tmp[j][0]!='#'j++)//进行第一次扫描,

{

for(int jj=0tmp[j][jj]!='\0'jj++)

{

if(tmp[j][jj]=='$')//能推出空

{

char tm=tmp[j][0]

for(int t=jtmp[t+1][0]!='#'t++)

strcpy(tmp[t],tmp[t+1])

tmp[t][0]='#'j--

for(int a=0Kong[a][0]!='#'a++)

{

if(Kong[a][0]==tm)

}

break

}

else if(tmp[j][jj]<'A'||tmp[j][jj]>'Z')//不能推出空

{

for(int jjj=jtmp[jjj+1][0]!='#'jjj++)

strcpy(tmp[jjj],tmp[jjj+1])

tmp[jjj][0]='#'j--

break

} }

}

for(int e=0Kong[e][0]!='#'e++)//把第一次扫描的结果记录到Kong数组里

{ for(int j=0tmp[j][0]!='#'j++)

if(Kong[e][0]==tmp[j][0]) break

if(tmp[j][0]=='#'&&Kong[e][1]!='1')Kong[e][1]='0'

}

int hj=0

for(int y=0Kong[y][0]!='#'y++)

{Kong[y][2]=Kong[y][1]

if(Kong[y][1]!='1'&&Kong[y][1]!='0')hj=1

}

N=3

if(hj==1)

{ int p=1

while(p)

{ for(int aa=0tmp[aa][0]!='#'aa++)

{ int bb=1,nn=0

for(tmp[aa][bb]!='\0'bb++)//逐个扫描产生式的每一个符号

{ for(int cc=0Kong[cc][0]!='#'cc++)//查看kong中的每一个非终结符

{

int oo=0

if(Kong[cc][0]==tmp[aa][bb])//在产生式中发现了一个非终结符

{

if(Kong[cc][1]=='1'||k[cc]=='1')//如果该非终结符被标记为能推出空,则删除该非终结符

{ int dd=bb

while(tmp[aa][dd+1]!='\0')

{ tmp[aa][dd]=tmp[aa][dd+1]

dd++

}

tmp[aa][dd]='\0'bb--

break

}

if(Kong[cc][1]=='0'||k[cc]=='0')//如果该非终结符被标记为不能推出空,说明此产生式左部亦不能推出空,记录,并删除此产生式

{ char jj=tmp[aa][0]

for(int ii=aatmp[ii+1][0]!='#'ii++)//删除产生式

strcpy(tmp[ii],tmp[ii+1])

tmp[ii][0]='#'aa--oo=1

int ll=0

for(int kk=0tmp[kk][0]!='#'kk++)

{

if(tmp[kk][0]==jj)//查看产生式数组中是否还有以此以产生式左部非终结符开始的产生式

}

if(ll==0)//产生式数组中没有以此非终结符开始的产生式,此非终结符标记为不能

{ for(int mm=0Kong[mm][0]!='#'mm++)

if(Kong[mm][0]==jj)

}

if(bb==1)//标记此产生式右部并不是因为全部被删除而产生的空

break

}

}

if(oo==1)break//已经有结果,循环没必要继续,退出

}

}

if(bb==1&&nn==0)//产生式右部全部被删除

{

for(int ee=0Kong[ee][0]!='#'ee++)//标记为能推出空

if(Kong[ee][0]==tmp[aa][0])

char ff=tmp[aa][0]

for(int hh=0tmp[hh][0]!='#'hh++)//删除左部为此非终结符的全部产生式

if(tmp[hh][0]==ff)

{

for(int gg=hhtmp[gg+1][0]!='#'gg++)

strcpy(tmp[gg],tmp[gg+1])

tmp[gg][0]='#'hh--aa--

}}

}

for(int mn=0Kong[mn][0]!='#'mn++)

{ Kong[mn][N]=k[mn]

if(Kong[mn][1]!='1'&&Kong[mn][1]!='0')

Kong[mn][1]=k[mn]

k[mn]='a'

}

N++

int ty=0

while(Kong[ty][0]!='#')

{ if(Kong[ty][1]!='0'&&Kong[ty][1]!='1')break

ty++

}

if(Kong[ty][0]=='#')p=0

} }

}

void KG(int a)//输出空格个数;

{ for(int i=0i<ai++)cout<<" "

}

public:

void print_Kong()//显示非终结符能否推出空的结果

{ Shu_Ru()

Hua_jian()

Vn()

Scan()

int num=0,num1,num2,num3

for(int i=0Kong[i][0]!='#'i++) num++

if(num==2)if(num==3)if(num==4)if(num==5)

if(num==6)if(num==7)if(num==8)

cout<<"\n\n ************非终结符能否推出空的表************\n"

cout<<"┏================================================== =======┑"

cout<<"┊"KG(num2)cout<<"非终结符"KG(num3)cout<<"┊"

for(int ii=0ii<numii++)

{ KG(num1)cout<<Kong[ii][0]KG(num1)cout<<"┊"

}

cout<<"├————————————————————————————————┤"

cout<<"┊"KG(num2+num3+8)cout<<"┊"

for(int kk=0kk<numkk++)

{ KG(num1+num1+1)cout<<"┊"

}

cout<<"┊"KG(num2+2)cout<<"初值"KG(num3+2)cout<<"┊"

for(int iii=0iii<numiii++)

{ KG(num1-1)cout<<"未定"KG(num1-2)cout<<"┊"

}

for(int we=2we<Nwe++)

{ cout<<"┊"KG(num2+num3+8)cout<<"┊"

for(int s=0s<nums++)

{ KG(num1+num1+1)cout<<"┊"

}

cout<<"┊"KG(num2)cout<<"第"<<we-1<<"次扫描"KG(num3-1)cout<<"┊"

for(int j=0j<numj++)

else if(Kong[j][we]=='0')

else

}

}

cout<<"┊"KG(num2+num3+8)cout<<"┊"

for(int ss=0ss<numss++)

{ KG(num1+num1+1)cout<<"┊"

}

cout<<"├———————————————————————————————————┤"

cout<<"┊"KG(num2)cout<<"最终结果"KG(num3)cout<<"┊"

for(int jjj=0jjj<numjjj++)

else if(Kong[jjj][1]=='0')

else

}

cout<<"┕===============================================================┙"

}

}

class Qiu_First:public Yui_Kong

{

public:

char FIRST[30][30]

int number2[30]//记录非终结符FIRST集元素的数目

int number1[30]//记录非终结符在FIRST中的位置,与产生式数组配对使用

char chan_sheng_shi[30][30]

int U//记录符号集合与符号串集合的分界

int number3[30]

void chu_shi_hua()//初始化 FIRST、number1、number2、chan_sheng_shi

{ int i=0

for(Kong[i][0]!='#'i++)

FIRST[i][0]='#'U=i

i=0

for(Yufa0[i][0]!='#'i++)

{for(int j=0Yufa0[i][j]!='\0'j++)

chan_sheng_shi[i][j]=Yufa0[i][j]

chan_sheng_shi[i][j]='\0'

for(int k=0FIRST[k][0]!='#'k++)

if(chan_sheng_shi[i][0]==FIRST[k][0])

}

chan_sheng_shi[i][0]='#'

}

void he_bing(char ch[30][30],int m,int i,int &j,char ch0[30][30],int m0,int i0,int j0)//要扩展的集合、指明行数、指明集合元素开始的位置、指明集合元素结束位置……

{ for(int a=i0a<j0a++)

{

int b=i

for(b<jb++)

if(ch[m][b]==ch0[m0][a])break

if(b==j)

ch[m][j++]=ch0[m0][a]

} }

void scan1()

{ int a=0,aa=0

while(chan_sheng_shi[a][0]!='#')

{ if(chan_sheng_shi[a][1]=='$')

{aa=a

for(chan_sheng_shi[aa+1][0]!='#'aa++)

{

strcpy(chan_sheng_shi[aa],chan_sheng_shi[aa+1])number1[aa]=number1[aa+1]

}

chan_sheng_shi[aa][0]='#'a--

}

else if(chan_sheng_shi[a][1]<'A'||chan_sheng_shi[a][1]>'Z')

{

FIRST[number1[a]][number2[number1[a]]++]=chan_sheng_shi[a][1]

aa=a

for(chan_sheng_shi[aa+1][0]!='#'aa++)

{

strcpy(chan_sheng_shi[aa],chan_sheng_shi[aa+1])number1[aa]=number1[aa+1]

}

chan_sheng_shi[aa][0]='#'a--

}

a++

}

a=0

while(FIRST[a][0]!='#')

{

int i=0

for(chan_sheng_shi[i][0]!='#'i++)

if(chan_sheng_shi[i][0]==FIRST[a][0])break

if(chan_sheng_shi[i][0]=='#')

FIRST[a][1]='1'

a++

}

}

void scan2()

{

int a=0,aa=0

for(chan_sheng_shi[a][0]!='#'a++)

{

aa=1int n

while(chan_sheng_shi[a][aa]!='\0')

{

n=0

if((chan_sheng_shi[a][aa]>='A'&&chan_sheng_shi[a][aa]<='Z')&&(chan_sheng_shi[a][aa+1]<'A'||chan_sheng_shi[a][aa+1]>'Z'))

n=1

if((chan_sheng_shi[a][aa]>='A'&&chan_sheng_shi[a][aa]<='Z')&&(chan_sheng_shi[a][aa+1]>='A'&&chan_sheng_shi[a][aa+1]<='Z'))

{

int a2=0

for(int a1=0Kong[a1][0]!='#'a1++)

{

if(chan_sheng_shi[a][aa]==Kong[a1][0])

{if(Kong[a1][1]=='0')a2=1

break

}

}

if(a2==1) n=1

}

if(n==1)

{

FIRST[number1[a]][number2[number1[a]]++]=chan_sheng_shi[a][aa]

for(int aaa=achan_sheng_shi[aaa+1][0]!='#'aaa++)

{

strcpy(chan_sheng_shi[aaa],chan_sheng_shi[aaa+1])number1[aaa]=number1[aaa+1]

}

chan_sheng_shi[aaa][0]='#'

a--

break

}

FIRST[number1[a]][number2[number1[a]]++]=chan_sheng_shi[a][aa]

aa++

}

}

}

void zheng_li()

{

int a=1

while(a)

{

for(int b=0FIRST[b][0]!='#'b++)

{

if(FIRST[b][1]=='0')//说明含有非终结符

{

for(int c=2c<number2[b]c++)

{

if(FIRST[b][c]>='A'&&FIRST[b][c]<='Z')//找到非终结符进行集合扩展

for(int d=0FIRST[d][0]!='#'d++)

if(FIRST[d][0]==FIRST[b][c]&&FIRST[d][1]=='1')//找到要添加的集合并且此集合已经整理完毕

}

int e=0

for(int f=2f<number2[b]f++)

if(FIRST[b][f]>='A'&&FIRST[b][f]<='Z')

if(e==0)

FIRST[b][1]='1'

}

}

int h=0

for(int g=0FIRST[g][0]!='#'g++)

if(FIRST[g][1]=='0')

if(h==0) a=0

}

for(a=0FIRST[a][0]!='#'a++)

{

if(Kong[a][1]=='1')

FIRST[a][number2[a]++]='$'

}

}

void kuo_zhan(int &b,int &c,int &d)

{

int m=1,i=2

for(i<number2[d]i++)

{

int j=2

for(j<number2[b]j++)//查找,没有则插入

if(FIRST[d][i]==FIRST[b][j])break

if(j==number2[b])//插入

{

if(m==1)

{

m=0FIRST[b][c]=FIRST[d][i]

}

else

{

for(int n=number2[b]n>cn--)

FIRST[b][n]=FIRST[b][n-1]

FIRST[b][c]=FIRST[d][i]

number2[b]++

c++

}

}

}

if(m==1)

{

for(int n=cn<number2[b]n++)

FIRST[b][n]=FIRST[b][n+1]

number2[b]--

c--

}

}

void print_FIRST()

{

chu_shi_hua()

scan1()

scan2()

zheng_li()

cout<<"\n 1.非终结符的 FIRST 集:"

cout<<"\n ┏┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┓\n\n"

for(int i=0FIRST[i][0]!='#'i++)

{

cout<<" FIRST( "<<FIRST[i][0]<<" ) ={ "<<FIRST[i][2]

for(int j=3j<number2[i]j++)

cout<<" , "<<FIRST[i][j]

cout<<" }\n\n"

}

cout<<" ┗┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┛\n"

chuan_first()

}

void re_chu()

{

for(int i=0Yufa0[i][0]!='#'i++)

{

for(int j=0Yufa0[i][j]!='\0'j++)

chan_sheng_shi[i][j]=Yufa0[i][j]

chan_sheng_shi[i][j]='\0'

}

chan_sheng_shi[i][0]='#'

i=U+1

for(int j=0chan_sheng_shi[j][0]!='#'j++)

{

for(int j1=1chan_sheng_shi[j][j1]!='\0'j1++)

FIRST[i][j1-1]=chan_sheng_shi[j][j1]

number2[i]=number3[i-U]=j1-1

i++

}

FIRST[i][0]='#'

}

void chuan_first()

{

re_chu()

for(int i=U+1FIRST[i][0]!='#'i++)

{

if(FIRST[i][0]>='A'&&FIRST[i][0]<='Z')

{

for(int i2=0Kong[i2][0]!='#'i2++)

if(Kong[i2][0]==FIRST[i][0])break

if(Kong[i2][1]=='0')

he_bing(FIRST,i,number3[i-U],number2[i],FIRST,i2,2,number2[i2])

if(Kong[i2][1]=='1')

{

for(int i3=0i3<number3[i-U]i3++)

{

for(int i4=0Kong[i4][0]!='#'i4++)

if(Kong[i4][0]==FIRST[i][i3])break

if(Kong[i4][1]=='1')

{

he_bing(FIRST,i,number3[i-U],number2[i],FIRST,i4,2,number2[i4])

number2[i]--

}

if(Kong[i4][1]=='0')

{

he_bing(FIRST,i,number3[i-U],number2[i],FIRST,i4,2,number2[i4])

break

}

}

if(i3==number3[i-U]) FIRST[i][number2[i]++]='$'

}

}

else

FIRST[i][number2[i]++]=FIRST[i][0]

}

for(int j=U+1FIRST[j][0]!='#'j++)

FIRST[j][number2[j]]='\0'

//print_chuan_first()

}

void print_chuan_first()

{

cout<<"/n每一个符号串的 FIRST 集:"

cout<<"\n ┏┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┓\n\n"

for(int i=U+1FIRST[i][0]!='#'i++)

{

cout<<" FIRST( "

for(int i1=0i1<number3[i-U]i1++)

cout<<FIRST[i][i1]

cout<<" ) ={ "<<FIRST[i][i1]

for(i1=number3[i-U]+1i1<number2[i]i1++)

cout<<" , "<<FIRST[i][i1]

cout<<" }\n\n"

}

cout<<" ┗┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┛\n"

}

}

class Qiu_Follow:public Qiu_First

{

public:

char FOLLOW[30][30]

int n1[30]

int n2[30]

void chu_shi_hua_follow()

{

for(int i=0Yufa0[i][0]!='#'i++)

strcpy(chan_sheng_shi[i],Yufa0[i])

chan_sheng_shi[i][0]='#'

for(int j=0Kong[j][0]!='#'j++)

{

FOLLOW[j][0]=Kong[j][0]n1[j]=n2[j]=1

}

FOLLOW[0][1]='#'n1[0]=n2[0]=2

FOLLOW[j][0]='#'

}

void qiu_follow_ji()

{chu_shi_hua_follow()

int a=1

while(a){

a=0

for(int i=0FOLLOW[i][0]!='#'i++)

{

for(int i0=0chan_sheng_shi[i0][0]!='#'i0++)

{

for(int i1=1chan_sheng_shi[i0][i1]!='\0'i1++)

if(FOLLOW[i][0]==chan_sheng_shi[i0][i1])//如果在产生式中找到一个此非终结符则进行处理

{

if(chan_sheng_shi[i0][i1+1]=='\0')//A->aB

{

for(int i2=0FOLLOW[i2][0]!='#'i2++)

if(FOLLOW[i2][0]==chan_sheng_shi[i0][0])break

he_bing(FOLLOW,i,1,n1[i],FOLLOW,i2,1,n1[i2])

}

else if(chan_sheng_shi[i0][i1+1]<'A'||chan_sheng_shi[i0][i1+1]>'Z')//A->aBc

{

for(int m=1m<n1[i]m++)

if(FOLLOW[i][m]==chan_sheng_shi[i0][i1+1])break

if(m==n1[i])

FOLLOW[i][n1[i]++]=chan_sheng_shi[i0][i1+1]

}

else //A->aBCD……

{

for(int i3=0Kong[i3][0]!='#'i3++)//判断C是否能推出空

if(Kong[i3][0]==chan_sheng_shi[i0][i1+1])break

if(Kong[i3][1]=='0')//C不能推出空

he_bing(FOLLOW,i,1,n1[i],FIRST,i3,2,number2[i3])

else//C能推出空,则查看D……

{

he_bing(FOLLOW,i,1,n1[i],FIRST,i3,2,number2[i3])

n1[i]--

int j=0

for(int i4=i1+2chan_sheng_shi[i0][i4]!='\0'i4++)

{

if(chan_sheng_shi[i0][i4]>='A'&&chan_sheng_shi[i0][i4]<='Z')

{j=0

for(int i5=0Kong[i5][0]!='#'i5++)

if(Kong[i5][0]==chan_sheng_shi[i0][i4])break

if(Kong[i5][1]=='0')

{

he_bing(FOLLOW,i,1,n1[i],FIRST,i5,2,number2[i5])

j=1

break

}

else

}

else

{

for(int k=1k<n1[i]k++)

if(FOLLOW[i][k]==chan_sheng_shi[i0][i4])break

if(k==n1[i])

FOLLOW[i][n1[i]++]=chan_sheng_shi[i0][i4]

j=1break}

}

if(j==0)

{

for(int i6=0FOLLOW[i6][0]!='#'i6++)

if(FOLLOW[i6][0]==chan_sheng_shi[i0][0])break

he_bing(FOLLOW,i,1,n1[i],FOLLOW,i6,1,n1[i6])

}

}

}

}

}

}

for(int b=0FOLLOW[b][0]!='#'b++)

if(n1[b]!=n2[b])

for(b=0FOLLOW[b][0]!='#'b++)

n2[b]=n1[b]

}

}

void print_FOLLOW()

{

qiu_follow_ji()

cout<<"\n2.非终结符的 FOLLOW 集:"

cout<<"\n ┏┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┓\n\n"

for(int i=0FOLLOW[i][0]!='#'i++)

{

cout<<" FOLLOW( "<<FOLLOW[i][0]<<" ) ={ "<<FOLLOW[i][1]

for(int j=2j<n1[i]j++)

cout<<" , "<<FOLLOW[i][j]

cout<<" }\n\n"

}

cout<<" ┗┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┛\n"

}

}

class Qiu_Select:public Qiu_Follow

{

public:

char SELECT[30][30]

int num[30]

void qiu_select()

{

for(int a=0a<30a++)num[a]=0

for(int i=U+1FIRST[i][0]!='#'i++)

{

if(FIRST[i][number2[i]-1]=='$')

{

number2[i]--

he_bing(SELECT,i-U-1,0,num[i-U-1],FIRST,i,number3[i-U],number2[i])

int s=i-U-1

for(int i1=0FOLLOW[i1][0]!='#'i1++)

if(FOLLOW[i1][0]==Yufa0[s][0])break

he_bing(SELECT,i-U-1,0,num[i-U-1],FOLLOW,i1,1,n1[i1])

number2[i]++

}

else

{

he_bing(SELECT,i-U-1,0,num[i-U-1],FIRST,i,number3[i-U],number2[i])

}

}

}


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/457952.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-06-03
下一篇2023-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存