91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 7KB
    文件類型: .cpp
    金幣: 1
    下載: 0 次
    發布日期: 2021-05-26
  • 語言: C/C++
  • 標簽: CYK算法??C++??

資源簡介

CYK的C++實現,輸入的產生式放在文件中,各位需要將產生式以如下格式輸入"S AB",文件名自己起了。

資源截圖

代碼片段和文件信息

#include????????????????????????????????????????????????????????//基本輸入輸出操作等?
#include?????????????????????????????????????????????????????????????//關聯容器?
#include????????????????????????????????????????????????????????//迭代器?
#include?????????????????????????????????????????????????????????//文件操作?
#include?????????????????????????????????????????????????????????//Dev-C++特有?
/**?使用關聯容器Map
????存在一個問題,就是最終求出的V[i][j]中可能存在重復的值,如SASC,
????不符合經典集合論的要求?
*/
using?namespace?std;??????????????????????????????????????????????????????
typedef?map::value_type?valType;????????????????????????????//自定義數據類型map::value_type
typedef?string*?*pString;??????????????????????????????????????????????????//定義指向string*的指針?
map?P;??????????????????????????????????????????????????????//存儲產生式的關聯容器?

/*------------------------------------讀取產生式并存入對應的數據結構中-------------------------------------*/
void?readFromFile(){??????????????????????????????????????????????????????//從文件中讀取產生式?
?????string?key;??????????????????????????????????????????????????????????//喬姆斯基范式中產生式右邊部分作為key
?????string?value;????????????????????????????????????????????????????????//?左邊的非終結符作為value
?????string?input;????????????????????????????????????????????????????????//臨時存放讀入的字符串
?????int?location;????????????????????????????????????????????????????????//讀取文件時存儲空格位置?
?????ifstream?in(“Production.txt“);???????????????????????????????????????//以只讀方式打開文件
??????
?????if(!in){?????????????????????????????????????????????????????????????//文件打開失敗的異常處理?
?????????cerr<<“文件打開失敗“<?????????exit(-1);????????
?????}
?????while(in.peek()!=EOF){???????????????????????????????????????????????//開始讀取文件內的內容,存入Production?
?????????getline(ininput);???????????????????????????????????????????????//首先讀取一行
?????????location=input.find(‘?‘);????????????????????????????????????????//查找空格位置?
?????????value=input.substr(0location);??????????????????????????????????//喬姆斯基范式中產生式左邊非終結符作為value
?????????key=input.substr(location+1input.size());???????????????????????//右邊部分作為key?
?????????if(P.count(key)==0){?????????????????????????????????????????????//關聯容器中還沒有key對應的非終結符?
?????????????P.insert(valType(keyvalue));????????????????????????????????//插入鍵值對?
?????????}??????????????????
?????????else{
?????????????P[key]+=value;????????????????????????????????????????????????//關聯容器中已存在key對應的非終結符?
?????????}
?????}??
?????/**
?????for(map::iterator?it=P.begin();it!=P.end();it++)??????//測試用?
????????cout<<(*it).second<<“-->“<<(*it).first<}

/*----------------------------------------從控制臺讀入需判斷的字符串--------------------------------------*/?
void?readFromConsole(string&?w){???????????????????????????????????????????//返回字符串的長度,以定義數組V的大小?
?????cout<<“請輸入要判斷的字符串:“<?????cin>>w;???????????????????????????????????????????????????????????????//從控制臺輸入需判

評論

共有 條評論