CPP_Basic_Code_P8.1-PP8.8.7

CPP_Basic_Code_P8.1-PP8.8.7

//  The Notes Created by Z-Tech on 2017/2/17.
//  All Codes Boot on 《C++ Primer Plus》V6.0
//  OS:MacOS 10.12.4
//  Translater:clang/llvm8.0.0 &g++4.2.1
//  Editer:iTerm 2&Sublime text 3
//  IDE: Xcode8.2.1&Clion2017.1

//P8.1
#include <iostream>
inline double square(double x) {return x*x;}//注意內聯函數結尾沒有;
int main()
{
    using namespace std;
    double a,b;
    double c=13.0;

    a=square(5.0);
    b=square(4.5+7.5);
    cout<<"a= "<<a<<",b= "<<b<<"\n";
    cout<<"c= "<<c;
    cout<<",c square= "<<square(c++)<<"\n";
    cout<<"Now c= "<<c<<"\n";
    return 0;
}

//P8.2
#include <iostream>
int main()
{
    using namespace std;
    int rats=101;
    int& rodents=rats;//引用rodents
    cout<<"rats= "<<rats;
    cout<<",rodents= "<<rodents<<endl;
    rodents++;
    cout<<"rats= "<<rats;
    cout<<",rodents= "<<rodents<<endl;

    cout<<"rats address= "<<&rats;
    cout<<",rodents address= "<<&rodents<<endl;
    return 0;
}

//P8.3
#include <iostream>
int main()
{
    using namespace std;
    int rats=101;
    int& rodents=rats;//引用rodents

    cout<<"rats= "<<rats;
    cout<<",rodents= "<<rodents<<endl;

    cout<<"rats address= "<<&rats;
    cout<<",rodents address= "<<&rodents<<endl;

    int bunnies=50;
    rodents=bunnies;
    cout<<"bunnies= "<<bunnies;
    cout<<",rats= "<<rats;
    cout<<",rodents= "<<rodents<<endl;

    cout<<"bunnies address= "<<&bunnies;
    cout<<",rodents address= "<<&rodents<<endl;
    return 0;//應該通過初始化聲明來引用,而不能通過賦值引用
}

//P8.4
#include <iostream>
void swapr(int& a,int& b);
void swapp(int* p,int* q);
void swapv(int a,int b);
int main()
{
    using namespace std;
    int wallet1=300;
    int wallet2=360;
    cout<<"wallet1= $"<<wallet1;
    cout<<"  wallet2= $"<<wallet2<<endl;

    cout<<"Using reference to swap contents:\n";
    swapr(wallet1,wallet2);//引用法交換
    cout<<"wallet1= $"<<wallet1;
    cout<<"  wallet2= $"<<wallet2<<endl;

    cout<<"Using pointer  to swap contents:\n";
    swapp(&wallet1,&wallet2);//指針法交換
    cout<<"wallet1= $"<<wallet1;
    cout<<"  wallet2= $"<<wallet2<<endl;

    cout<<"Using R_value  to swap contents:\n";
    swapv(wallet1,wallet2);//實值法交換是無效的
    cout<<"wallet1= $"<<wallet1;
    cout<<"  wallet2= $"<<wallet2<<endl;

    return 0;
}

void swapr(int& a,int& b)
{
    int temp;
    temp=b;
    b=a;
    a=temp;
}

void swapp(int* p,int* q)
{
    int temp;
    temp=*q;
    *q=*p;
    *p=temp;
}

void swapv(int a,int b)//此函數實際是無效的
{
    int temp;
    temp=b;
    b=a;
    a=temp;
}

//P8.5
#include <iostream>
double cube(double a);
double refcube(double &ra);//引用式參數
int main()
{
    using namespace std;
    double x=3.0;

    cout<<cube(x);
    cout<<" = cube of "<<x<<endl;
    cout<<refcube(x);
    cout<<" = cube of "<<x<<endl;
    return 0;
}

double cube(double a)//副本而已,不會改變x的值
{
    a*=a*a;
    return a;
}

double refcube(double &ra)//引用會改變x的值
{
    ra*=ra*ra;
    return ra;
}

//P8.6
#include <iostream>
#include <string>
struct free_throws
{
    std::string name;
    int made;
    int attempts;
    float percent;
};
void display(const free_throws& ft);
void set_pc(free_throws& ft);
free_throws& accumulate(free_throws& target,const free_throws& source);
int main()
{
    free_throws one {"Ifelsa Branch",13,14};
    free_throws two {"Andor Knots",10,16};
    free_throws three {"Minnie Max",7,9};
    free_throws four {"Whily Looper",5,9};
    free_throws five {"Long Long",6,14};
    free_throws team {"Throwgoods",0,0};

    free_throws dup;

    set_pc(one);
    display(one);
    accumulate(team,one);
    display(team);

    display(accumulate(team,two));
    accumulate(accumulate(team,three),four);
    display(team);

    dup=accumulate(team,five);
    std::cout<<"Displaying team:\n";
    display(team);
    std::cout<<"Displaying dup after assignment:\n";
    display(dup);
    set_pc(four);

    accumulate(dup,five)=four;//此類語句應該避免,最后dup仍為four
    std::cout<<"Displaying dup after ill-advised assignment:\n";
    display(dup);
    return 0;
}

void display(const free_throws& ft)
{
    using namespace std;
    cout<<"Name: "<<ft.name<<'\n';
    cout<<"Made: "<<ft.made<<'\t';
    cout<<"Attempts: "<<ft.attempts<<'\t';
    cout<<"Percent: "<<ft.percent<<'\n';
}

void set_pc(free_throws& ft)
{
    if (ft.attempts!=0)
        ft.percent=100.0f*float(ft.made)/float(ft.attempts);//強制類型轉換
    else
        ft.percent=0;
}

free_throws& accumulate(free_throws& target,const free_throws& source)
{
    target.attempts+=source.attempts;
    target.made+=source.made;
    set_pc(target);
    return target;//返回引用
}

//P8.7
#include <iostream>
#include <string>//非必需
using namespace std;
string version1(const string& s1,const string& s2);
const string& version2(string& s1,const string& s2);//單邊效應
const string& version3(string& s1,const string& s2);//糟糕的設計,雖clion中未崩潰

int main()
{
    string input;
    string copy;
    string result;

    cout<<"Enter a string: ";
    getline(cin,input);
    copy=input;
    cout<<"Your string as entered: "<<input<<endl;

    result=version1(input,"****");
    cout<<"Your string enhanced: "<<result<<endl;
    cout<<"Your original string: "<<input<<endl;

    result=version2(input,"###");
    cout<<"Your string enhanced: "<<result<<endl;
    cout<<"Your original string: "<<input<<endl;

    cout<<"Resetting original string.\n";
    input=copy;
    result=version3(input,"@@@");

    cout<<"Your string enhanced: "<<result<<endl;
    cout<<"Your original string: "<<input<<endl;

    return 0;
}

string version1(const string& s1,const string& s2)
{
    string temp;
    temp=s2+s1+s2;
    return temp;
}

const string& version2(string& s1,const string& s2)
{
    s1=s2+s1+s2;
    return s1;
}

const string& version3(string& s1,const string& s2)
{
    string temp;
    temp=s2+s1+s2;
    return temp;//危險操作,返回即將被析構的temp!
}

//P8.8
#include <iostream>
#include <fstream>
//#include <cstdlib>//非必需
using namespace std;
void file_it(ostream& os,double fo,const double fe[],int n);
const int LIMIT=5;

int main()
{
    ofstream fout;
    const char* fn="ep-data.txt";//字面字符串賦值必需使用const
    fout.open(fn);
    if (!fout.is_open())//檢測打開是否正常
    {
        cout<<"Can't open"<<fn<<".Bye.\n";
        exit(EXIT_FAILURE);
    }
    double objective;
    cout<<"Enter the focal length of your "
        "telescope objective in mm: ";
    cin>>objective;
    double eps[LIMIT];
    cout<<"Enter the focal length,in mm,of "<<LIMIT<<" eyepieces:\n";
    for (int i=0;i<LIMIT;i++)
    {
        cout<<"Eyepiece #"<<i+1<<": ";
        cin>>eps[i];
    }
    file_it(fout,objective,eps,LIMIT);
    file_it(cout,objective,eps,LIMIT);
    cout<<"Done.\n";
    return 0;
}

void file_it(ostream& os,double fo,const double fe[],int n)
{
    ios_base::fmtflags initial;//聲明格式化存儲信息initial,存儲格式化設置
    initial=os.setf(ios_base::fixed);//使用定點表示法模式
    os.precision(0);//定點模式下有效,指定小數位數設置
    os<<"Focal length of objective: "<<fo<<" mm\n";
    os.setf(ios::showpoint);//顯示小數點模式
    os.precision(1);
    os.width(12);//輸出的字段寬度,此設置僅是一次性的
    os<<"f.1. eyepiece";
    os.width(15);
    os<<"magnification"<<endl;
    for (int i=0;i<n;i++)
    {
        os.width(12);
        os<<fe[i];
        os.width(15);
        os<<int(fo/fe[i]+0.5)<<endl;
    }
    os.setf(initial);//恢復最初的格式化設置initial
}

//P8.9
#include <iostream>
const int ArSize=80;
char* left(const char*str,int n=1);
int main()
{
    using  namespace std;
    char sample[ArSize];
    cout<<"Enter a string:\n";
    cin.get(sample,ArSize);
    char* ps=left(sample,4);
    cout<<ps<<endl;
    delete [] ps;//刪除new出的指針,地址已被賦予ps
    ps=left(sample);
    cout<<ps<<endl;
    delete [] ps;
    return 0;
}

char* left(const char*str,int n)//默認值添加到原型就足夠,否則重復初始化
{
    if (n<0)
        n=0;
    char* p=new char[n+1];//最后一位標記'\0'
    int i;
    for (i=0;i<n&&str[i];i++)//其中str[i]可確保未抵達數組字符串末尾前為true
        p[i]=str[i];
    while (i<=n)//為"假設要求5位,原字符串卻只有4位設計"
        p[i++]='\0';//將剩余的數組部分填充0
    return p;
}

//P8.10
#include <iostream>
unsigned long left(unsigned long num, unsigned ct);
char* left(const char* str,int n=1);

int main()
{
    using namespace std;
    const char* trip="Hawaii!!";
    unsigned long n=12345678;
    int i;
    char* temp;

    for (i=1;i<10;i++)
    {
        cout<<left(n,i)<<endl;//函數重載1
        temp=left(trip,i);//函數重載2,且賦值出temp是為了delete
        cout<<temp<<endl;
        delete [] temp;
    }
    return 0;
}

unsigned long left(unsigned long num, unsigned ct)
{
    unsigned digits=1;
    unsigned long n=num;

    if (ct==0||num==0)
        return 0;
    while (n/=10)//測出輸入總共有多少位
        digits++;
    if (digits>ct)
    {
        ct=digits-ct;
        while (ct--)
            num/=10;//刪除ct位后就是所要的num
        return num;
    }
    else
        return num;
}

char* left(const char* str,int n)
{
    if (n<0)
        n=0;
    char*p=new char[n+1];
    int i;
    for (i=0;i<n&&str[i];i++)
        p[i]=str[i];
    while (i<=n)//防止要求的位數比能提供的多
        p[i++]='\0';
    return p;
}

//P8.11
#include <iostream>
template  <typename T>//or use <class T>
void Swap(T& a,T& b);//引用式模板交換函數

int main()
{
    using namespace std;
    int i=10;
    int j=20;
    cout<<"i,j= "<<i<<", "<<j<<".\n";
    cout<<"Using compiler-generated int swapper:\n";
    Swap(i,j);
    cout<<"Now i,j= "<<i<<", "<<j<<".\n";

    double x=24.5;
    double y=81.7;
    cout<<"x,y= "<<x<<", "<<y<<".\n";
    cout<<"Using compiler-generated int swapper:\n";
    Swap(x,y);
    cout<<"Now x,y= "<<x<<", "<<y<<".\n";
    return 0;
}

template  <typename T>//定義前面也必須帶這個模板聲明
void Swap(T& a,T& b)
{
    T temp;
    temp=a;
    a=b;
    b=temp;
}

//P8.12
#include <iostream>
template <typename T>
void Swap(T& a,T& b);//指向引用

template <typename T>
void Swap(T* a,T* b,int n);//指向指針
void show(int a[]);
const int Lim=8;
int main()
{
    using namespace std;
    int i=10,j=20;
    cout<<"i,j= "<<i<<", "<<j<<".\n";
    cout<<"Using compiler-generated int swapper:\n";
    Swap(i,j);
    cout<<"Now i,j= "<<i<<", "<<j<<".\n";

    int d1[Lim] {0,7,0,4,1,7,7,6};
    int d2[Lim] {0,7,2,0,1,9,6,9};
    cout<<"Original array:\n";
    show(d1);
    show(d2);
    Swap(d1,d2,Lim);
    cout<<"Swapped arrays:\n";
    show(d1);
    show(d2);

    return 0;
}

template <typename T>
void Swap(T& a,T& b)
{
    T temp;
    temp=a;
    a=b;
    b=temp;
}

template <typename T>
void Swap(T* a,T* b,int n)
{
    T temp;
    for (int i=0;i<n;i++)
    {
        temp=a[i];
        a[i]=b[i];
        b[i]=temp;
    }
}

void show(int a[])
{
    using namespace std;
    cout<<a[0]<<a[1]<<"/";
    cout<<a[2]<<a[3]<<"/";
    for (int i=4;i<Lim;i++)
        cout<<a[i];
    cout<<endl;
}

//P8.13
#include <iostream>
template <typename T>
void Swap(T& a,T& b);

struct job
{
    char name[40];
    double salary;
    int floor;
};

template <> void Swap<job>(job& j1,job& j2);//顯式具體化
void show(job& j);

int main()
{
    using namespace std;
    cout.precision(2);
    cout.setf(ios::fixed,ios::floatfield);
    int i=10,j=20;
    cout<<"i,j= "<<i<<", "<<j<<".\n";
    cout<<"Using compiler-generated int swapper:\n";
    Swap(i,j);
    cout<<"Now i,j= "<<i<<", "<<j<<".\n";

    job sue {"Susan Yaffee",73000.60,7};
    job sidney {"Sidney Taffee",78060.72,9};
    cout<<"Before job swapping:\n";
    show(sue);
    show(sidney);
    Swap(sue,sidney);//交換結構中的數值
    cout<<"After job swapping:\n";
    show(sue);
    show(sidney);

    return 0;
}

template <typename T>
void Swap(T& a,T& b)
{
    T temp;
    temp=a;
    a=b;
    b=temp;
}

template <> void Swap<job>(job& j1,job& j2)
{
    double t1;
    int t2;
    t1=j1.salary;
    j1.salary=j2.salary;
    j2.salary=t1;
    t2=j1.floor;
    j1.floor=j2.floor;
    j2.floor=t2;
}

void show(job& j)
{
    using namespace std;
    cout<<j.name<<": $"<<j.salary<<" on floor "<<j.floor<<endl;
}

//P8.14
#include <iostream>

template <typename T>
void ShowArray(T arr[],int n);//接收指針

template <typename T>
void ShowArray(T* arr[],int n);//接收指向指針的指針

struct debts
{
    char name[50];
    double amount;
};

int main()
{
    using namespace std;
    int thing[6] {13,31,103,301,310,130};
    debts mr_E[3]
    {
        {"Ima Wolfe",2400.0},
        {"Ura Foxe",1300.0},
        {"Iby Stout",1800.0}
    };
    double* pd[3];//指針數組

    for (int i=0;i<3;i++)
        pd[i]=&mr_E[i].amount;//全部指向結構體中的double

    cout<<"Listing Mr.E's counts of thing:\n";
    ShowArray(thing,6);//thing是數組名,是一個指向第一個元素的指針
    cout<<"Listing Mr.E's debts:\n";
    ShowArray(pd,3);//pd是指針數組的數組名,是指向第一個指針的指針

    return 0;
}

template <typename T>
void ShowArray(T arr[],int n)
{
    using namespace std;
    cout<<"template A\n";
    for (int i=0;i<n;i++)
        cout<<arr[i]<<' ';
    cout<<endl;
}

template <typename T>
void ShowArray(T* arr[],int n)
{
    using namespace std;
    cout<<"template B\n";
    for (int i=0;i<n;i++)
        cout<<*arr[i]<<' ';//指針必須解除引用
    cout<<endl;
}

//P8.15
#include <iostream>

template <class T>
T lesser(T a,T b)//返回值較小的那個
{
    return a<b?a:b;
}

int lesser(int a,int b)//返回絕對值較小的那個
{
    a=a<0?-a:a;
    b=b<0?-b:b;
    return a<b?a:b;
}

int main()
{
    using namespace std;
    int m=20;
    int n=-30;
    double x=15.5;
    double y=25.9;

    cout<<lesser(m,n)<<endl;//#2
    cout<<lesser(x,y)<<endl;//#1
    cout<<lesser<>(m,n)<<endl;//#1顯式實例化,<>提示選擇模板函數
    cout<<lesser<int>(x,y)<<endl;//#1顯式實例化,使用int代替T來執行實例化
    //故此,會丟小數點
    return 0;
}

//PP8.8.1
#include <iostream>
void show(const char* str,int n=0);
int main()
{
    using namespace std;
    const char* strr="Hello,word.\n";
    show(strr);
    int number;
    cout<<"Enter a number: ";
    cin>>number;
    show(strr,number);
    cout<<"Done.\n";

    return 0;
}

void show(const char* str,int n)
{
    using namespace std;
    if (n<=0)
        n=1;
    for (int i=0;i<n;i++)
        cout<<str;
}

//PP8.8.2
#include <iostream>
struct CandyBar
{
    char Brandname[30];
    double Weight;
    int Calaries;
};
void fill_struct(CandyBar& strc,const char* nm="Millennium Munch",double wt=2.85,int clr=350);
void show_struct(CandyBar& strc);
int main()
{
    using namespace std;
    CandyBar* xv=new CandyBar;
    cout<<"Please enter Brandname: ";
    cin>>xv->Brandname;
    cout<<"\nEnter Weight of product: ";
    cin>>xv->Weight;
    cout<<"\nEnter Calaries of product: ";
    cin>>xv->Calaries;
    show_struct(*xv);

    fill_struct(*xv);
    show_struct(*xv);

    fill_struct(*xv,"快說你是不是傻",9.99,9999);
    show_struct(*xv);

    delete xv;
    return 0;
}

void fill_struct(CandyBar& strc,const char* nm,double wt,int clr)
{
    strcpy(strc.Brandname,nm);
    strc.Weight=wt;
    strc.Calaries=clr;

}

void show_struct(CandyBar& strc)
{
    using namespace std;
    cout<<"BrandName: "<<strc.Brandname<<endl;
    cout<<"Weight: "<<strc.Weight<<endl;
    cout<<"Calaries: "<<strc.Calaries<<endl;
}

//PP8.8.3
#include <iostream>
//#include <string>
//#include <cctype>
void fuct_up(std::string& str);

int main()
{
    using namespace std;
    string something;
    cout<<"Enter a string (q to quit): ";
    while (getline(cin,something)&&something!="q"&&something!="Q")
    {
        fuct_up(something);
        cout<<something<<endl;
        cout<<"Next string: (q to quit): ";
    }
    cout<<"\nBye!";
    return 0;
}

void fuct_up(std::string& str)
{
    long num=str.size();
    for (int i=0;i<num;i++)
        str[i]=toupper(str[i]);
}

//PP8.8.4
#include <iostream>
#include <cstring>
using namespace std;
struct stringy
{
    char* str;
    int ct;
};

void set(stringy& strct,char* str);
void show(const char* str,int num=1);
void show(const stringy& strct,int num=1);

int main()
{
    stringy beany;
    char testing[]="Reality isn't what it used to be.";

    set(beany,testing);

    show(beany);
    show(beany,2);

    testing[0]='D';//直接數組式操作調整字符串內容
    testing[1]='u';

    show(testing);
    show(testing,3);
    show("Done!");

    delete beany.str;//釋放內存
    return 0;
}

void set(stringy& strct,char* str)
{
    char* xvr=new char[strlen(str)+1];
    strct.str=xvr;//使結構成員指向new出的指針
    strcpy(strct.str,str);//復制字符串內容
    strct.ct=strlen(str);
}

void show(const char* str,int num)
{
    using namespace std;
    for (int i=0;i<num;i++)
        cout<<"Testing: "<<str<<endl;
}

void show(const stringy& strct,int num)
{
    using namespace std;
    for (int i=0;i<num;i++)
    {
        cout<<"String: "<<strct.str<<endl;
        cout<<"String Length: "<<strct.ct<<endl;
    }
}

//PP8.8.5&PP8.8.6
#include <iostream>
//#include <cstring>
template <typename T>
T maxn(T arry[],int n);

template <> const char* maxn(const char* arry[],int n);//字面值的字符串務必使用const

int main()
{
    using namespace std;
    int arr_int[6]{1,3,23,4,11,66};
    double  arr_db[4]{22.4,23.6,74.8,9.9};
    cout<<"Now using maxn():\n";
    cout<<"Array_int_Max: "<<maxn(arr_int,6)<<endl;
    cout<<"Array_db_Max: "<<maxn(arr_db,4)<<endl;

    const char* str_arry[5]{"Hello~","world!long~long~long!","Kitty~~","Love..","!Awesome!"};
    //字面值的字符串務必使用const
    cout<<"Max string: "<<maxn(str_arry,5)<<endl;
    cout<<"Done.";
    return 0;
}

template <typename T>
T maxn(T arry[],int n)
{
    T Max=arry[0];
    for (int i=0;i<n;i++)
    {
        if (Max<arry[i])
            Max=arry[i];
    }
    return Max;
}

template <> const char* maxn(const char* arry[],int n)//具體化
{
    const char* xv=arry[0];
    for (int i=1;i<n;i++)
    {
        if (strlen(arry[i])>strlen(xv))
            xv=arry[i];
    }
    return xv;//返回指針
}


//PP8.8.7
#include <iostream>

template <typename T>
void SumArray(T arr[],int n);//接收指針

template <typename T>
void SumArray(T* arr[],int n);//接收指向指針的指針

struct debts
{
    char name[50];
    double amount;
};

int main()
{
    using namespace std;
    int thing[6] {13,31,103,301,310,130};
    debts mr_E[3]
            {
                    {"Ima Wolfe",2400.0},
                    {"Ura Foxe",1300.0},
                    {"Iby Stout",1800.0}
            };
    double* pd[3];//指針數組

    for (int i=0;i<3;i++)
        pd[i]=&mr_E[i].amount;//全部指向結構體中的double

    cout<<"Listing Mr.E's counts of thing:\n";
    SumArray(thing,6);//thing是數組名,是一個指向第一個元素的指針
    cout<<"Listing Mr.E's debts:\n";
    SumArray(pd,3);//pd是指針數組的數組名,是指向第一個指針的指針

    return 0;
}

template <typename T>
void SumArray(T arr[],int n)
{
    using namespace std;
    cout<<"Result_Sum: \n";
    int count=0;
    for (int i=0;i<n;i++)
        count+=arr[i];
    cout<<count<<endl;
}

template <typename T>
void SumArray(T* arr[],int n)
{
    using namespace std;
    cout<<"Result_Sum: \n";
    int count=0;
    for (int i=0;i<n;i++)
        count+=*arr[i];//指針必須解除引用
    cout<<count<<endl;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,363評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,497評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,305評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,962評論 1 311
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,727評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,193評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,257評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,411評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,945評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,777評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,978評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,519評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,216評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,657評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,960評論 2 373

推薦閱讀更多精彩內容