當前位置:成語大全網 - 新華字典 - c++字典排序

c++字典排序

汗~不是說C++程序嗎?怎麽除了輸入輸出以外全是C風格的?

先說妳幾句,妳這程序寫得還真是把看官折騰得夠嗆,我反正是費了些工夫才弄明白妳在幹什麽。

而且妳這並不是排序,只是按字典序輸出而已,序其實沒變,對吧。。

先是壹個語法錯誤:

else if (replacement[m][n]=temp[n]) //“==”

count1++;

然後是邏輯問題:

for (int n=0;n<compare(ch[m],ch[J]);n++)

if (replacement[m][n]<temp[n])

{ for (int l=0;l<strlen(ch[m]);l++)

temp[l]=replacement[m][l];

J=m;

break;

}

else if (replacement[m][n]=temp[n])

count1++;

這段判斷並沒有實現字典序的比較,比如adjk,Bdkj作為輸入時,判斷並沒有在a,B的差異上打住,而是繼續判斷到j,k。

只要再加壹句

else

break;

就行了,至少妳的這個反例是沒什麽問題的。

看得出妳是初學者,至少是初學者等級,能寫到這程度值得稱道。

不過給妳提幾個小建議:

1.

for (int k=0;k<count;k++)

if (exist[k]==true)

break;

int J=k;

不要這樣使用k,現在的標準是for(int i;;)中的i是局部變量,出了循環就無效了。雖然vc6可以通過編譯。

2.

for (int n=0;n<compare(ch[m],ch[J]);n++)

這裏的compare函數用的不好,它會隨著每次循環都運行壹遍,若是這個值壹直不變還好,萬壹變了,這玩意就是無底洞,想陷多深就多深。。

3.與其映射成雙精度數字,全都轉化為小寫或者大寫再比較不也挺好嗎?省時省力省空間。

就這些吧,請好好加油~

最後推薦使用C++風格的程序,雖然我寫得不壹定好,但好歹是真的C++程序……

以下C++程序實現了妳的需求:

#include <iostream>

#include <algorithm>

#include <string>

#include <vector>

#include <cctype>

using namespace std;

bool comparator(string a, string b){

char c1,c2;

for(int i = 0 ; i < a.length() ; ++i)

{

if((c1 = tolower(a[i])) != (c2 = tolower(b[i]))){

return c1 < c2;

}

}

return true;

}

int main() {

vector<string> vec;

string temp;

cin >> temp;

while(temp != "#") {

vec.push_back(temp);

cin >> temp;

}

sort(vec.begin(),vec.end(),comparator);

for (vector<string>::const_iterator iter = vec.begin() ; iter < vec.end() ; ++iter)

{

cout << *iter << endl;

}

return 0;

}