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阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容