AnsiString.Pos() 的問題 |
尚未結案
|
Wuei
一般會員 ![]() ![]() 發表:10 回覆:11 積分:4 註冊:2003-08-14 發送簡訊給我 |
您好:
我有一個很長的字串,裡面有很多子字串,中間有空白間隔,例如
String MyString = "ABCDE ABCD ABC"; 我想找出子字串 MySubString 在 MyString 中的位置
令 MySubString = "ABCD"; 我試過:
MyPosition = MyString.Pos(MySubString);
MyPosition = MyString.Pos((" " MySubString " ").c_str()); 結果都會傳回1,似乎因為"ABCD"跟"ABCDE"重複,第二行加了空白還是一樣 若是:
MyPosition = MyString.Pos(" " MySubString " ");
則會傳回0,根本找不到 請問該怎麼寫才對呢?
多謝了!
|
RaynorPao
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 您好: 我有一個很長的字串,裡面有很多子字串,中間有空白間隔,例如 String MyString = "ABCDE ABCD ABC"; 我想找出子字串 MySubString 在 MyString 中的位置 令 MySubString = "ABCD"; 我試過: MyPosition = MyString.Pos(MySubString); MyPosition = MyString.Pos((" " MySubString " ").c_str()); 結果都會傳回1,似乎因為"ABCD"跟"ABCDE"重複,第二行加了空白還是一樣 若是: MyPosition = MyString.Pos(" " MySubString " "); 則會傳回0,根本找不到 請問該怎麼寫才對呢? 多謝了!Wuei 你好: 請參考以下的做法
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
Wuei
一般會員 ![]() ![]() 發表:10 回覆:11 積分:4 註冊:2003-08-14 發送簡訊給我 |
引言: Wuei 你好: 請參考以下的做法您好 宣告AnsiString和宣告String是不是一樣? 我試著將我程式中的Pos()改成AnsiPos() 結果還是一樣,回傳是前面有重複子字串的位置耶 謝謝 |
流
中階會員 ![]() ![]() ![]() 發表:36 回覆:142 積分:70 註冊:2003-07-24 發送簡訊給我 |
|
Wuei
一般會員 ![]() ![]() 發表:10 回覆:11 積分:4 註冊:2003-08-14 發送簡訊給我 |
|
RaynorPao
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
|
Wuei
一般會員 ![]() ![]() 發表:10 回覆:11 積分:4 註冊:2003-08-14 發送簡訊給我 |
引言: Wuei 你好: 你有完全照我的寫法嗎?? 建議你再檢查看看 |
RaynorPao
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 真的不行呀 我的程式是這樣: AnsiString NetString,StringBuffer; if( NetString.AnsiPos(" " StringBuffer " ") == 0 ) XXXXX; 所有的 String 宣告都改成 AnsiString 了 Pos() 也改成 AnsiPos() 了 但是在尋找(" " StringBuffer " ")時還是無法避免找到包含 "StringBuffer" 的字串 覺得字串處理真是很傷腦筋,能再幫我想想看嗎? 謝謝了!Wuei 你好: 麻煩你請提供完整的程式碼 (包括字串的內容),一直說不行,卻又不肯把程式 碼貼上來,猜謎遊戲真的那麼好玩嗎?? 有助於解決你的問題嗎??< >< > -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
lu
高階會員 ![]() ![]() ![]() ![]() 發表:11 回覆:189 積分:195 註冊:2003-11-19 發送簡訊給我 |
引言: 您好: 我有一個很長的字串,裡面有很多子字串,中間有空白間隔,例如 String MyString = "ABCDE ABCD ABC"; 我想找出子字串 MySubString 在 MyString 中的位置 令 MySubString = "ABCD"; 我試過: MyPosition = MyString.Pos(MySubString); MyPosition = MyString.Pos((" " MySubString " ").c_str()); 結果都會傳回1,似乎因為"ABCD"跟"ABCDE"重複,第二行加了空白還是一樣 若是: MyPosition = MyString.Pos(" " MySubString " "); 則會傳回0,根本找不到呵呵~~請注意大小寫的問題,POS是分大小寫的喔 建議你,先把兩個字串都轉換成大寫,再來做搜尋的動作喔,如下 String MyString = "ABCDE ABCD ABC"; String ss,s1; ss = MyString.UpperCase(); s1 = " ABCD "; int MyPosition = ss.Pos(s1); |
Wuei
一般會員 ![]() ![]() 發表:10 回覆:11 積分:4 註冊:2003-08-14 發送簡訊給我 |
引言: Wuei 你好: 麻煩你請提供完整的程式碼 (包括字串的內容),一直說不行,卻又不肯把程式 碼貼上來,猜謎遊戲真的那麼好玩嗎?? 有助於解決你的問題嗎??< >< > -- Enjoy Researching & Developing --因為程式碼很長啊!而且大部分的程式都跟這個問題沒關係 我就是卡在這一行,確定是這一行有問題 因為不常在這裡逛,不太清楚怎麼問比較有效率 冒犯的地方請多見諒 我所要處理的是OrCAD所轉出來的Netlist(*.asc) 程式是將檔案中的Net名稱和Nets擷取出來 擷取出來的字串會像是這個樣子: N1029584 U141.E11 RJ132.2 N19531391 U111.B5 RJ111.1 N1030008 RJ131.2 U141.A12 ADD7 U141.E1 U111.D3 .... 其中沒有"."的是Net名稱,有"."的就是Net 在擷取的過程中,會遇到兩個Net無法區別的情形,比方說如果已經有了"U141.E11"這個Net,那麼再遇到"U141.E1"這個Net程式就會以為已經有了,因而漏掉了這個Net(判斷式就是我問的那一行) 不知道這樣說對解決問題有沒有幫助,接著貼上我的程式碼(刪減了一些無關緊要的部分): --------------------------------------------------------------- //--------------------------------------------------------------------------- // Function ScanNet(FILE *netfile_p) // scan and return NetNames and Nets in a file, omit all other strings //--------------------------------------------------------------------------- AnsiString ScanNet(FILE *netfile_p) { int i; int NetNamePos = 1; int ScanFlag = 0; AnsiString StringBuffer=" "; // 15 characters AnsiString NetString=""; AnsiString CurrentNetName=" "; // 15 characters while(!feof(netfile_p)) { fscanf(netfile_p,"s",StringBuffer); switch(ScanFlag) { case 1: // add NetName // check if the NetName is already added, then add NetName if(strcmp(CurrentNetName.c_str(),StringBuffer.c_str()) != 0) { NetNamePos = NetString.Length() 1; strcpy(CurrentNetName.c_str(),StringBuffer.c_str()); NetString = NetString CurrentNetName.c_str() " "; } ScanFlag = 2; break; case 2: // add Nets if(StringBuffer.AnsiPos(".")!=0) { // extract current NetName and Nets than check if the Net has been added if( NetString.SubString(NetNamePos,NetString.Length()).AnsiPos(" " StringBuffer " ") == 0 ) NetString = NetString StringBuffer.c_str() " "; } else if(StringBuffer.AnsiPos("*SIGNAL*")!=0) ScanFlag = 1; // go on next NetName else ScanFlag = 2; // Nither a NetName or a Net, skip break; } } return NetString; } 再次感謝! |
RaynorPao
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 因為程式碼很長啊!而且大部分的程式都跟這個問題沒關係 我就是卡在這一行,確定是這一行有問題 因為不常在這裡逛,不太清楚怎麼問比較有效率 冒犯的地方請多見諒 我所要處理的是OrCAD所轉出來的Netlist(*.asc) 程式是將檔案中的Net名稱和Nets擷取出來 擷取出來的字串會像是這個樣子: N1029584 U141.E11 RJ132.2 N19531391 U111.B5 RJ111.1 N1030008 RJ131.2 U141.A12 ADD7 U141.E1 U111.D3 .... 其中沒有"."的是Net名稱,有"."的就是Net 在擷取的過程中,會遇到兩個Net無法區別的情形,比方說如果已經有了"U141.E11"這個Net,那麼再遇到"U141.E1"這個Net程式就會以為已經有了,因而漏掉了這個Net(判斷式就是我問的那一行) 不知道這樣說對解決問題有沒有幫助,接著貼上我的程式碼(刪減了一些無關緊要的部分): --------------------------------------------------------------- //--------------------------------------------------------------------------- // Function ScanNet(FILE *netfile_p) // scan and return NetNames and Nets in a file, omit all other strings //--------------------------------------------------------------------------- AnsiString ScanNet(FILE *netfile_p) { int i; int NetNamePos = 1; int ScanFlag = 0; AnsiString StringBuffer=" "; // 15 characters AnsiString NetString=""; AnsiString CurrentNetName=" "; // 15 characters while(!feof(netfile_p)) { fscanf(netfile_p,"s",StringBuffer); switch(ScanFlag) { case 1: // add NetName // check if the NetName is already added, then add NetName if(strcmp(CurrentNetName.c_str(),StringBuffer.c_str()) != 0) { NetNamePos = NetString.Length() 1; strcpy(CurrentNetName.c_str(),StringBuffer.c_str()); NetString = NetString CurrentNetName.c_str() " "; } ScanFlag = 2; break; case 2: // add Nets if(StringBuffer.AnsiPos(".")!=0) { // extract current NetName and Nets than check if the Net has been added if( NetString.SubString(NetNamePos,NetString.Length()).AnsiPos(" " StringBuffer " ") == 0 ) NetString = NetString StringBuffer.c_str() " "; } else if(StringBuffer.AnsiPos("*SIGNAL*")!=0) ScanFlag = 1; // go on next NetName else ScanFlag = 2; // Nither a NetName or a Net, skip break; } } return NetString; } 再次感謝!Wuei 你好: 不好意思,老實說~~我還是不太明白你真正的目的,我在此假設你的目的是想要 得到所有含有 "." 的字串,請參考以下的範例程式碼 (請再依照自己的需求做 必要的修改)
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |