變位詞:相同字母和字母數量,不同的組合順序。如單詞「stop」、「tops」就是變位詞。
思路:以單詞的「簽名」為鍵,以具有該鍵的單詞為值。
實現:#include
#include
#include
#include
#include
#include
using namespace std;
mapanagram;
//簽名用到的比較函式,按公升序排列
bool cmp(const char &x, const char &y)
return x//對詞典中的單詞進行簽名,生成map物件
void sign(const string &infile)
ifstream in(infile);
if(!in)
string word;
while(in >> word)
in.close();
void squash(const string &outfile)
ofstream out(outfile);
map::iterator it = anagram.begin();
while(it != anagram.end())
out.close();
int main(int argc, char **argv)
string infile;
string outfile;
cout << "please input the filename of dictionary: "< cin >>infile;
cin.clear();
cout << "please input the filename for storing anagram: "<
cin >>outfile;
cin.clear();
sign(infile);
squash(outfile);
return 0;
} 這裡所謂的「管道」結構就是乙個成程式的輸出作為另乙個程式的輸入,應用到本例就是sign的輸出作為sort的輸入,sort的輸出作為squash的輸入。
sign -> sort -> squash(其中sort採用系統的sort程式)。
//簽名
#include
#include
#include
#include
#define wordmax 100
int compare(const void *a,const void *b)
int main()
return 0;
}//寫入檔案
#include
#include
#include
#define wordmax 100
int main()
strcpy(oldsig, sig);
linenum++;
printf("%s ", word);
}printf("\n");
return 0;
}將生成的可執行檔案放到同乙個目錄下,在命令列中用命令:sign anagram.txt 執行。其中,word.txt為要檢測的字典, anagram.txt為排序後輸出的,變位詞在同一行。
附:關於sort和qsort函式
函式原型:void sort( randomit first, randomit last, compare comp );
其中:first為第乙個元素位置;
last為最後乙個元素位置;
comp為自定義比較函式(省略時,按公升序進行排序)。
如對乙個字串(string str)進行排序:
sort(str.begin(), str.end(), comp)
bool comp(const char &x, const char &y)
函式原型: void _cdecl qsort (void *base,
size_t
num, size_t width, int (__cdecl *comp)(const void *, const void* ))
其中:
base是待排序的乙個集合;
num是這個陣列元素的個數;
width是乙個元素的大小(占用的位元組數);
comp是乙個自定義的比較函式。
比如:對乙個長為1000的陣列(
int a[1000])
進行排序, 那麼base應為a,num應為 1000,width應為 sizeof(int),comp函式隨自己的命名。即:
qsort(a,1000,sizeof(int),comp);
其中comp函式可以為:
int comp(const void *a, const void *b)
上面是由小到大
排序,若改為:return *(int *)b - *(int *)a; 為由大到小排序。
《程式設計珠璣》學習總結2 變位詞
第二章主要圍繞三個問題 1 給定乙個最多包含40億個隨機排列的32位整數的順序檔案,找出乙個不在檔案中的32位整數 2 給定乙個n元一維向量,迴圈左移i個位置,如n 8,i 3時,abcdefgh變為defghabc 3 如pots stop和stops互為變位詞,每個單詞都可以通過其他單詞改變字母...
程式設計珠璣 變位詞程式的實現
這個程式的實現有助於壓縮key的大小,使查詢效率更高 1.問題描述 給定一本英語單詞詞典,請找出所有的變位詞集。所謂的變位詞是指,組成各個單詞的字母完全相同,只是字母排列的順序不同。2.解決思路 程式設計珠璣的變位詞程式要按照三個步驟來執行,其中前乙個步驟程式的輸出作為下乙個步驟程式的輸入 第一 程...
程式設計珠璣 變位詞程式的實現
這個程式的實現有助於壓縮key的大小,使查詢效率更高 1.問題描述 給定一本英語單詞詞典,請找出所有的變位詞集。所謂的變位詞是指,組成各個單詞的字母完全相同,只是字母排列的順序不同。2.解決思路 第一 程式標識單詞,第二 程式排序標識後的檔案,第三 程式將這些單詞壓縮為每個變位詞類一行的形式 下面是...