日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

编程珠玑 15.3生成文本

發布時間:2024/9/30 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编程珠玑 15.3生成文本 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

/*----------------------------------------隨機生成文本程序2011.3.15 by LiWang112358----------------------------------------*/#include <iostream> #include <time.h>using namespace std;int k = 2;//二元模型;當前單詞的產生依賴于前一個單詞 char inputchars[5000000]; char * word[1000000]; int nword = 0;int cmp(char * p,char * q) {int n = k;for (; *p == *q; p ++ ,q ++)if ( 0 == *p && -- n == 0)//只有當后綴數組的前兩個單詞相同時,默認是相同的return 0;return *p - *q; }int sortcmp(const void * p,const void * q) {return cmp((char *)p,(char *)q) <= 0; }void myQsort(char * a[],int l,int r) {int i,j;char * s = a[l];i=l;j=r;while (i<=j){while (cmp(a[i],s) < 0 && i<=j) i++;while (cmp(a[j],s) > 0 && i<=j) j--;if (i<=j){swap(a[i],a[j]);i++;j--;}}if (i<r) myQsort(a,i,r);if (l<j) myQsort(a,l,j); }int find(int begin,int end,char * x,char * a[]) // 二分查找 {int l = begin,r = end,mid = (l + r) >> 1;while (l <= r){if (strcmp(a[mid],x) < 0) l = mid + 1;else if (strcmp(a[mid],x) > 0) r = mid - 1;else if (strcmp(a[mid],x) == 0){while (mid > 0 && strcmp(a[mid],a[mid - 1]) == 0) --mid;return mid;}mid = (l + r) >> 1;}return -1; }char * skip(char * p,int num) {for (int i = 0; i < num ; ++ i){for (; (*p) > 0; ++ p);p++;}return p; } int main() {freopen("in.txt","r",stdin);memset(inputchars,0,sizeof(inputchars));word[0] = inputchars;while (scanf("%s",word[nword]) != EOF){word[nword + 1] = word[nword] + strlen(word[nword]) + 1;nword ++;}for (int i = 0; i < k; ++ i)word[nword][i] = 0;myQsort(word,0,nword - 1);srand(int(time(0)));char * p = inputchars;for (int i = 0; i < 10000; ++ i){printf("%s ",p);if ( i > 0 && i % 20 == 0) printf("/n");int pos = find(0,nword - 1,p,word);int j = 0;for (j = 0; strcmp(p,word[pos + j]) == 0 && pos + j < nword; ++ j);int rd = abs(rand()) % j;p = word[pos + rd];p = skip(p,1);if (strlen(skip(p,k - 1)) == 0) break;}return 0; }

轉自:http://blog.csdn.net/liwang112358/article/details/6253758


總結

以上是生活随笔為你收集整理的编程珠玑 15.3生成文本的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。