程式設計珠璣 學習筆記 2 變位詞

2021-06-22 17:44:33 字數 2508 閱讀 9889

變位詞:相同字母和字母數量,不同的組合順序。如單詞「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.解決思路 第一 程式標識單詞,第二 程式排序標識後的檔案,第三 程式將這些單詞壓縮為每個變位詞類一行的形式 下面是...