找回密碼 或 安全提問
 註冊
|註冊|登錄

伊莉討論區

搜索
尊貴會員無限使用任何功能尊貴會員無限下載附件安全提問(回答) 和 永久尊貴會員 事宜
mg三上悠亜火影三上無碼流出overlord
abw 366king gnu天巫tinyコン狐と卿卿dass 351

休閒聊天興趣交流學術文化旅遊交流飲食交流家庭事務PC GAMETV GAME
熱門線上其他線上感情感性寵物交流家族門派動漫交流貼圖分享BL/GL
音樂世界影視娛樂女性頻道潮流資訊BT下載區GB下載區下載分享短片
電腦資訊數碼產品手機交流交易廣場網站事務長篇小說體育運動時事經濟
上班一族博彩娛樂

[繁]為美好的世界獻上

[繁]關於我轉生變成史

城管沒收百姓烤爐 結

[繁]轉生貴族憑鑑定技

快艇正妹豪乳吸睛

(4月新番)[繁]為美好
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 6025|回復: 22
打印上一主題下一主題

[問題]C++字串比較問題[複製鏈接]

Rank: 2Rank: 2

帖子
543
積分
587 點
潛水值
10540 米
跳轉到指定樓層
樓主
發表於 2018-7-2 11:50 AM|只看該作者|正序瀏覽
回覆中加入附件並不會使你增加積分,請使用主題方式發佈附件。
本帖最後由 jackyo04 於 2018-7-5 08:51 AM 編輯

我程式會依照需求,產生N個字串,但每個字串又不能重複,字串的內容是根據條碼機而來的,目前是用了笨方法,我用"strcmp"跟每個字串做比較,譬如我有4個字串,我就讓每個字串比較3次,但程式碼都是一大串...有沒有比較聰明的方式呢?
以下是我目前用的方法..舉利來說:我有4個字串要比較->先將字串轉成char->寫兩層for迴圈如下:
...
瀏覽完整內容,請先 註冊登入會員
分享分享0收藏收藏0支持支持0

使用道具檢舉

Rank: 2Rank: 2

帖子
191
積分
265 點
潛水值
17080 米
23
發表於 2018-8-8 08:27 PM|只看該作者
ash1326 發表於 2018-8-8 08:24 PM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

for(int i=0;i

如果只是要字串比對。你的code可以縮減成這樣就行了

演算原理:位於"最後方"的字串,會依序跟"前面"的字串進行比對...
瀏覽完整內容,請先 註冊登入會員
若有安裝色情守門員,可用無界、自由門等軟件瀏覽伊莉。或使用以下網址瀏覽伊莉: http://www.eyny.com:81/index.php

使用道具檢舉

Rank: 2Rank: 2

帖子
191
積分
265 點
潛水值
17080 米
22
發表於 2018-8-8 08:24 PM|只看該作者
分享使你變得更實在,可以使其他人感到快樂,分享是我們的動力。今天就來分享你的資訊、圖片或檔案吧。
for(int i=0;i<count;i++){
        for (int j=0;j<i;j++){
                if(strcmp(ss[i],ss[j]) == 0){
                        ShowMessage("第"+String(i+1)+"列條碼與第"+String(j+1)+"重複出現");
                        return;
                }
...
瀏覽完整內容,請先 註冊登入會員
如果瀏覽伊莉時速度太慢或無法連接,可以使用其他分流瀏覽伊莉,www01.eyny.com(02,03)。

使用道具檢舉

love88131496 該用戶已被刪除
21
發表於 2018-7-13 06:05 PM|只看該作者
本帖最後由 love88131496 於 2018-7-13 08:18 PM 編輯

直接補上程式碼:

std::unordered_map<std::string, bool> *output=new std::unordered_map<std::string, bool>(); //將來產生的不重複字串都在這個unordered_map的key中

int maxCount=100; //要產生幾個(100)不重複的字串
int curCount=0;
whille(true){
    std::string newS=generateFromAlg(); //假設generateFromAlg會產生一個字串(但不保證不重複
...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

love88131496 該用戶已被刪除
20
發表於 2018-7-13 05:58 PM|只看該作者
所有積分大於負-100的壞孩子,將可獲得重新機會成為懲罰生,權限跟幼兒生一樣。
搶頭香的DuckDogDog大大的才是正解!!!!!

兩個字串怎比對,用strcmp/拆成char迴圈比對,沒差
但重點是: 妳所有字串要兩兩比對!!!!!
這個在演算法上,妳寫回圈的話,是N平方的複雜度,程式會慢到無比

DuckDogDog大大建議比對用Hashmap比對,是因為Hash至少使用Tree來作Key的Index
所以演算時間只剩Log(N), 整體是N*Log(N), 比N平方降低很多級數!

外層還是要一個迴圈(目前要跟別人比的),裡面就值接丟去Hashmap比(要被別人比的)。外面N, 裡面Log(N)...
瀏覽完整內容,請先 註冊登入會員





使用道具檢舉

Rank: 2Rank: 2

帖子
1051
積分
617 點
潛水值
27330 米
19
發表於 2018-7-10 11:52 AM|只看該作者
所有積分大於負-100的壞孩子,將可獲得重新機會成為懲罰生,權限跟幼兒生一樣。
jackyo04 發表於 2018-7-10 08:19 AM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

我有想果這個方法,但判斷式回隨著流水號的增減而改變,不能一勞永逸 ...

不用傷這個腦筋.
strcmp 的比較就是用這個方法. 比對第一個字元不一樣就return 了.
...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

Rank: 2Rank: 2

帖子
543
積分
587 點
潛水值
10540 米
18
發表於 2018-7-10 08:19 AM|只看該作者
本帖最後由 jackyo04 於 2018-7-10 12:57 PM 編輯
z1090128 發表於 2018-7-9 11:50 PM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

如果每次先比較每個字串的第一個字母,不符合就往下跳一個,有符合就繼續判別下一個字母,這樣會不會比較快 ...
...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

帖子
73
積分
0 點
潛水值
13020 米
17
發表於 2018-7-9 11:50 PM|只看該作者
所有積分大於負-100的壞孩子,將可獲得重新機會成為懲罰生,權限跟幼兒生一樣。
如果每次先比較每個字串的第一個字母,不符合就往下跳一個,有符合就繼續判別下一個字母,這樣會不會比較快?
分享使你變得更實在,可以使其他人感到快樂,分享是我們的動力。今天就來分享你的資訊、圖片或檔案吧。

使用道具檢舉

Rank: 2Rank: 2

帖子
543
積分
587 點
潛水值
10540 米
16
發表於 2018-7-5 10:32 AM|只看該作者
若瀏覽伊莉的時侯發生問題或不正常情況,請使用Internet Explorer(I.E)。
snowflying 發表於 2018-7-5 10:09 AM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

非零值是 true 呀

1.就是說,每次只比較100個流水號,比較完的那些序號就沒用了,所以會將set<string> s裡的資料清除
...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

  尊貴會員

Melty Snow  雪靈

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

帖子
3222
積分
24364 點
潛水值
77200 米
15
發表於 2018-7-5 10:09 AM|只看該作者
如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。
jackyo04 發表於 2018-7-5 10:00 AM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

其實我也挺糾結的XD
我用bool來判斷,實驗很多組字串,但它回傳的結果我很意外,目前確定的是,相同為0, ...

非零值是 true 呀
...
瀏覽完整內容,請先 註冊登入會員





Melty Snow [雪靈]
若新密碼無法使用,可能是數據未更新。請使用舊密碼看看。

使用道具檢舉

  尊貴會員

Melty Snow  雪靈

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

帖子
3222
積分
24364 點
潛水值
77200 米
14
發表於 2018-7-5 10:03 AM|只看該作者
若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com
baepi 發表於 2018-7-5 09:31 AM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

以下是執行結果
重點是index = 0 and 2 and 4依舊是只有0 1 -1 三種結果...生不出其他結果
為此...我還特 ...

我用 Dev-C++ 5.11 跑起來也是 0 -1 1 三種
...
瀏覽完整內容,請先 註冊登入會員
Melty Snow [雪靈]
回覆中加入附件並不會使你增加積分,請使用主題方式發佈附件。

使用道具檢舉

Rank: 2Rank: 2

帖子
543
積分
587 點
潛水值
10540 米
13
發表於 2018-7-5 10:00 AM|只看該作者
本帖最後由 jackyo04 於 2018-7-5 10:03 AM 編輯
baepi 發表於 2018-7-5 09:31 AM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

以下是執行結果
重點是index = 0 and 2 and 4依舊是只有0 1 -1 三種結果...生不出其他結果
為此...我還特 ...
...
瀏覽完整內容,請先 註冊登入會員

點評

jackyo04 baepi大大說:不能用bool型態紀錄...因為0跟-1都算false.. 我以為我觀念錯了,當下沒想那麼多,就去做實驗了XD  發表於 2018-7-5 10:34 AM
cockroachrun c/c++ 本來就是非0 為true , 0 為false 所以 1 -1 都是true , 只有 0 是false  發表於 2018-7-5 10:13 AM
所有積分大於負-100的壞孩子,將可獲得重新機會成為懲罰生,權限跟幼兒生一樣。

使用道具檢舉

Rank: 2Rank: 2

帖子
475
積分
967 點
潛水值
31669 米
12
發表於 2018-7-5 09:31 AM|只看該作者
分享使你變得更實在,可以使其他人感到快樂,分享是我們的動力。今天就來分享你的資訊、圖片或檔案吧。
snowflying 發表於 2018-7-5 03:12 AM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

strcmp 在 cplusplus.com 有說明喔
return value 那邊
  1. #include<iostream>
  2. #include<windows.h>
  3. #include<string>
  4. using namespace std;

  5. const int max_count = 5;
  6. string str[max_count];
  7. //隨意填值...反正是測試
  8. void set_data()
  9. {
  10.         str[0] = (char)1;
  11.         str[1] = "ABCD";
  12.         str[2] = "~~~~~~~~~~~~~";
  13.         str[3] = "ABCD";
  14.         str[4] = (char)255;
  15. }
  16. void logic()
  17. {
  18.         bool c1 = false;
  19.         for (int i = 0, ii = 0; i < max_count; i++)
  20.         {
  21.                 for (int j = i + 1; j < max_count; j++, ii++)
  22.                 {
  23.                         int ans = strcmp(str[i].c_str(), str[j].c_str());
  24.                         if (ans == 0)//代表相同
  25.                         {
  26.                                 c1 = true;
  27.                                 //cout << "index = " << i << " 的 " << str[i] << " 和 " << "index = " << j << " 的 " << str[j] << " 是一樣的\n";
  28.                                 //break;//若是抓到一樣就中斷的話....
  29.                         }
  30.                         cout << "前比較字串index = " << i << "\t" << str[i] << "\t後比較字串index = " << j << "\t" << str[j] << "\t結果 = " << ans << "\n";
  31.                 }
  32.         }
  33.         if (c1)//有字串是一樣的
  34.         {
  35.                 //動作
  36.         }
  37. }
  38. void main()
  39. {
  40.         set_data();
  41.         logic();
  42.         system("pause");
  43. }
複製代碼
以下是執行結果
重點是index = 0 and 2 and 4
  1. 前比較字串index = 0            後比較字串index = 1     ABCD    結果 = -1
  2. 前比較字串index = 0            後比較字串index = 2     ~~~~~~~~~~~~~   結果 = -1
  3. 前比較字串index = 0            後比較字串index = 3     ABCD    結果 = -1
  4. 前比較字串index = 0            後比較字串index = 4           結果 = -1
  5. 前比較字串index = 1     ABCD    後比較字串index = 2     ~~~~~~~~~~~~~   結果 = -1
  6. 前比較字串index = 1     ABCD    後比較字串index = 3     ABCD    結果 = 0
  7. 前比較字串index = 1     ABCD    後比較字串index = 4           結果 = -1
  8. 前比較字串index = 2     ~~~~~~~~~~~~~   後比較字串index = 3     ABCD    結果 = 1
  9. 前比較字串index = 2     ~~~~~~~~~~~~~   後比較字串index = 4           結果 = -1
  10. 前比較字串index = 3     ABCD    後比較字串index = 4           結果 = -1
  11. 請按任意鍵繼續 . . .
複製代碼
依舊是只有0 1 -1 三種結果...生不出其他結果
為此...我還特地去翻閱我撰寫的其他單晶片程式...不同總類的也就只有3種...我知道不多orz...更甚至linux下的C++...執行亦是如此
當然,我知道糾結這節點很沒意思,而且msdn也是如大眾說明說的的0,>0,<0,反正判斷是否相等就用回傳值是否==0罷了...只是就結果論...我是真的看不到0 1 -1 以外的回傳值就是...
瀏覽完整內容,請先 註冊登入會員

點評

baepi jackyo04 大大已經成功打我臉...BCB測出結果已經有非0 1 -1 以外的字串orz  發表於 2018-7-5 09:47 AM

使用道具檢舉

  尊貴會員

Melty Snow  雪靈

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

帖子
3222
積分
24364 點
潛水值
77200 米
11
發表於 2018-7-5 03:12 AM|只看該作者
如果瀏覽伊莉時速度太慢或無法連接,可以使用其他分流瀏覽伊莉,www01.eyny.com(02,03)。
baepi 發表於 2018-7-5 01:34 AM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

回復snowflying大大
strcmp我是根據自己之前的印象去說明的...或許說明有誤...但是我剛剛去測試了一下... ...

strcmp 在 cplusplus.com 有說明喔
...
瀏覽完整內容,請先 註冊登入會員
Melty Snow [雪靈]
分享使你變得更實在,可以使其他人感到快樂,分享是我們的動力。今天就來分享你的資訊、圖片或檔案吧。

使用道具檢舉

Rank: 2Rank: 2

帖子
475
積分
967 點
潛水值
31669 米
10
發表於 2018-7-5 01:34 AM|只看該作者
本帖最後由 baepi 於 2018-7-5 01:38 AM 編輯
snowflying 發表於 2018-7-5 12:42 AM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

不知道 "樓下" 是哪一層樓,底下沒看到有人說這個量大很慢
如果你的資料量是算億的,那麼你需要的是分散式 ...
...
瀏覽完整內容,請先 註冊登入會員





點評

jackyo04 我用bool測試了很多次,字串也是我隨機給的(英文數字參雜),沒有誤判耶..  發表於 2018-7-5 09:04 AM
jackyo04 我是用C++ Builder測試,用單純的String轉成char後比較,將String設為"aaa"來比,測出的值會有-2,-3,-4....或2,3,4...之類的結果發生  發表於 2018-7-5 09:02 AM

使用道具檢舉

您需要登錄後才可以回帖 登錄 | 註冊

Powered by Discuz!

© Comsenz Inc.

重要聲明:本討論區是以即時上載留言的方式運作,對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿上傳和撰寫 侵犯版權(未經授權)、粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。
回頂部