注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mister.Hu(巷里人家)

Go abroad!

 
 
 

日志

 
 
关于我

A campus photograph palyer,an enthusiastic reader,a solitary writer,a future traffic engineer.

网易考拉推荐

C++强化【4】  

2015-08-18 13:21:47|  分类: Senior |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

实例47 图书管理系统

#include <iostream>

using namespace std;

 

struct book

{

         char ch_num[3];//两个字节,最多为99

         char ch_name[100];//100个字节,最多为50个汉字

         char ch_author[10];//10个字节,最多为5个汉字

         char ch_publisher[50];//50个字节,最多为25个汉字

};

int main()

{

         book Book[100];//数据库只能存100条项目

         int number=5;//初始化为5

         strcpy(Book[0].ch_num, "00");//数据库中现有5条记录

         strcpy(Book[0].ch_name,"微信,这么玩才赚钱");

         strcpy(Book[0].ch_author, "王易");

         strcpy(Book[0].ch_publisher,"机械工业出版社");

         strcpy(Book[1].ch_num,"01");

         strcpy(Book[1].ch_name,"微信营销解密");

         strcpy(Book[1].ch_author,"程小永");

         strcpy(Book[1].ch_publisher,"机械工业出版社");

         strcpy(Book[2].ch_num,"02");

         strcpy(Book[2].ch_name,"C++ Primer中文版(第5版)");

         strcpy(Book[2].ch_author,"(美)李普曼、拉乔伊");

         strcpy(Book[2].ch_publisher,"电子工业出版社");

         strcpy(Book[3].ch_num,"03");

         strcpy(Book[3].ch_name,"疯狂Android讲义");

         strcpy(Book[3].ch_author,"李刚");

         strcpy(Book[3].ch_publisher,"电子工业出版社");

         strcpy(Book[4].ch_num,"04");

         strcpy(Book[4].ch_name,"C程序设计 第四版");

         strcpy(Book[4].ch_author,"谭浩强");

         strcpy(Book[4].ch_publisher,"清华大学出版社");

         cout<<"------------------------图书管理系统---------------------"<<endl;

         cout<<"现库存图书有00-04,图书信息有以下内容:"<<endl;

         cout<<"图书编号---------图书名---------图书作者--------图书出版社"<<endl;

         int choice;

         int del_num;//删除信息

         int modify_num;//要修改信息

         int inspect_num;//查询信息

         bool xunhuan=true;

         while(xunhuan)

         {

                   cout<<"当前库存"<<number<<"条图书信息"<<endl;

                   cout<<"请选择您要操作的功能,对应功能选择按键:"<<endl;

                   cout<<"0-退出"<<endl;

                   cout<<"1-添加"<<endl;

                   cout<<"2-删除"<<endl;

                   cout<<"3-修改"<<endl;

                   cout<<"4-查询"<<endl;

                   cin>>choice;

                   switch(choice)

                   {

                  case 0://退出

                            cout<<"退出成功"<<endl;

                            xunhuan=false;

                            break;

                   case 1://添加

                            cout<<"请遵照上面信息排列输入新图书的信息:"<<endl;

                            number++;

                           cin>>Book[number].ch_num>>Book[number].ch_name>>Book[number].ch_author>>Book[number].ch_publisher;

                            break;

                   case 2://删除

                            cout<<"要删除的第几条信息";

                            cin>>del_num;

                            number--;

                            if(del_num>number)

                                     cout<<"没有该条信息"<<endl;

                            else if(del_num==number)//删除最后一条

                            {

                                     strcpy(Book[del_num-1].ch_author,"");

                                     strcpy(Book[del_num-1].ch_name,"");

                                     strcpy(Book[del_num-1].ch_publisher,"");

                                     strcpy(Book[del_num-1].ch_num,"");

                            }

                            else

                            {

                                     for(int i=del_num-1;i<number;i++)

                                     {

                                               strcpy(Book[i].ch_author,Book[i+1].ch_author);

                                               strcpy(Book[i].ch_name,Book[i+1].ch_name);

                                               strcpy(Book[i].ch_publisher,Book[i+1].ch_publisher);

                                     }

                            }

                            break;

                   case 3://修改

                            cout<<"请输入要修改第几条信息";

                            cin>>modify_num;

                            if(modify_num>number)

                                     cout<<"没有该条信息"<<endl;

                            else

                            {

                                     cout<<"按次序输入新内容,如果部分修改,可将原信息原样输入"<<endl;

                                     cin>>Book[modify_num-1].ch_num>>Book[modify_num-1].ch_name>>Book[modify_num-1].ch_author>>Book[modify_num-1].ch_publisher;

                            }

                            break;

                   case 4://查询

                            cout<<"请输入要查询第几条信息:";

                            cin>>inspect_num;

                            cout<<Book[inspect_num].ch_num<<" "<<Book[inspect_num].ch_name<<" "<<Book[inspect_num].ch_author<<" "<<Book[inspect_num].ch_publisher<<endl;

                            break;

                   default:

                            break;

                   }

         }

         return 0;

}

注:观察这个程序,首先定义了一个结构体struct book,并定义了里面的四个char变量。然后,在main中调用book结构建立一个数组BOOK[],并用strcpy对每个BOOK中的四个变量进行赋值,至此图书馆本身书目建立完成。

第二部分则是人机互动环节,在while循环中内置了一个switch函数,将四种case分别写出。注意在删除信息时,如果删除的是中间的一条信息,则需要将该条信息之后的信息全部向前移动一步即可,其次需要注意,BOOK[k]对应的是第k+1条信息,故,在用户输入第k条信息时,需要对BOOK[]BOOK[k-1]

 

实例48:异教徒入海问题

#include <iostream>

using namespace std;

 

int main()

{

         int all[30];//所有人编号

         int yijiao[15];//异教徒编号

         int jidu[15];//基督徒编号

         int i,k,yijiao_count,yijiao_index,jidu_count;

         for (i=0;i<30;i++)

                   all[i]=i+1;  //每人编号

         i=0;  //i为每次循环时计数变量

         k=0;  //k为按12...9报数时计数变量

         yijiao_count=0;  //投入海人数

         yijiao_index=0;  //存被投入海者数组的下标

         jidu_count=0;  //存在船上人编号数组的下标

         while (yijiao_count<15)//15个投入海

         {

                   if (all[i]!=0)//没被丢入海

                            k++;

                   if (k==9)

                   {

                            yijiao[yijiao_index]=all[i];

                            yijiao_index++;

                            all[i]=0;//被丢入海标志

                            k=0;

                            yijiao_count++;

                   }

                   i++;

                   if (i==30)//到边界

                            i=0;

         }

         for(i=0;i<30;i++)

         {

                   if (all[i]!=0)

                   {

                            jidu[jidu_count]=all[i];

                            jidu_count++;

                   }

         }

         cout<<"被投入海的序号为:"<<endl;

         for(i=0;i<15;i++)

         {

                   cout<<yijiao[i]<<"  ";

         }

         cout<<endl<<"留在船上的序号为:"<<endl;

         for(i=0;i<15;i++)

         {

                   cout<<jidu[i]<<"  ";

         }

         cout<<endl;

        

         return 0;

}

注:第一步,对所有人编号:for (i=0;i<30;i++ )all[i]=i+1; 此时,每个人被编成1-30号装入all[0]-all[29]中。

第二步,开始进行循环。将被丢入海中的人的编号设为0,所以判断all[i]!=0时,计数加一。当计数加至9时,该人的编号设为0,在这之前,将该人的编号保存至yijiao[yijiao_index]中,并将yijiao_index加一以备储存下一个异教徒的编号。完成这些工作后,将计数回归为0,将已经投入海中的异教徒数目加一。

第三步,判断是否到达圆圈的终点,即判断i是否等于30.若等于,则将i赋值为0,否则会加到超过30.

至此,主要循环体结束,同时还需要附加循环体用于存储基督教徒的编号,即将最后编号不为0的编号输入到jidu[jidu_count]中。

该算法的关键在于下面的循环体:

while (yijiao_count<15)//15个投入海

         {

                   if (all[i]!=0)//没被丢入海

                            k++;

                   if (k==9)

                   {

                            yijiao[yijiao_index]=all[i];

                            yijiao_index++;

                            all[i]=0;//被丢入海标志

                            k=0;

                            yijiao_count++;

                   }

                   i++;

                   if (i==30)//到边界

                            i=0;

         }

 

实例49 数组转置

#include <iostream>

using namespace std;

 int main()

{

         //一维数组的转置

         int array_2[5][5];//定义一个二维数组

          cout<<"转置前的数组为:"<<endl;

         for(int r=0;r<5;r++)//数组初始化

         {

                   for(int k=0;k<5;k++)

                   {

                            array_2[r][k]=r+k*4;

                            cout<<array_2[r][k]<<"  ";

                   }

                   cout<<endl;

         }

          //转置

         for(int i=0;i<5;i++)

         {

                   for(int j=i+1;j<5;j++)

                   {

                            //以对角线为对称轴互换元素

                            int temp;

                            temp=array_2[i][j];

                            array_2[i][j]=array_2[j][i];

                            array_2[j][i]=temp;

                   }

         }

          cout<<"转置后的数组为:"<<endl;

         for(int m=0;m<5;m++)

         {

                   for(int n=0;n<5;n++)

                   {

                            cout<<array_2[m][n]<<"  ";

                   }

                   cout<<endl;

         }

         return 0;

}

注:关键部分是数组转置的那一块,注意仅需以对角线为轴进行一边的转置即可,因为对角线上的元素不需要转置,而以对角线为轴,一边的元素都可以与另一边形成映射关系。

 

实例50 51string char的区别

Char是一个字符,而string是一个字符串

StringC++中定义的一个字符串数组,其等效于char[],但char[]的长度是需要事先定义的,而string则不需要。

调用string函数时需要写入函数头#include <string>,该函数头中包含许多函数可直接调用,使得对String的操作更加方便。后续会主要介绍。

 

实例52:截断字符串

#include <iostream>

#include <string>

using namespace std;

//把一个字符串截断\0

int main()

{

         char str[10]="abscdwj\0eowifj";//字符串变量

         for(int i=0;i<10;i++)

         cout<<str[i]<<endl;

          return 0;

}

注:关键在于\0,在字符串中插入\0后,字符串会在该处直接断开跳出,故此例的输出值为abscdwj。将char str[10]="abscdwj\0eowifj"改为string str="abscdwj\0eowifj"同样适用。

for(int i=0;i<10;i++)

         cout<<str[i]<<endl;

直接改为cout<<str<<endl;也是可行的。

 

实例53:使用getchar()函数吸收缓冲区垃圾

#include <iostream>

using namespace std;

int main()

{

         while(1)

                   cout<<char(getchar())<<endl;

         return 0;

}

注:getchar()函数本身用于从缓冲区读取一个字符并且返回其ASCII码,此题中用char将其再强制转换为char型。任意输入一串字符,将依次输出字符串的字符。

实例54:字符串输入(getline()

#include <iostream>

#include <string>

using namespace std;

//字符串输入,解释getline函数

int main()

{

         string str;

         getline(cin,str,'$');

         cout<<str<<endl;

         return 0;

}

注:getline(cin,str,'$')的含义是,输入一个字符串,其将在截取字符串$之前的部分输出。结果如下图所示。

 实例55:复制一个字符串(strcpy()

#include <iostream>

using namespace std;

//复制一个字符串(strcpy()

int main()

{

         char str1[]="Hello World";

         char str2[30];

         strcpy(str2, str1);

          cout<<str2<<endl;

         return 0;

}

注:此题中主要介绍strcpy()的作用,注意,strcpy()属于C语言范畴,所以其并不需要#include <string>的支持,而且注意,strcpy()函数所针对的对象为char,而不是string.而且注意str2作为最终的容纳字符数组,必须要明确定义其大小,即    char str2[30];

 实例56:获得字符串长度(strlen()

#include <iostream>

using namespace std;

//获得字符串长度(strlen()

int main()

{

         char str[]="HelloWorld";

         cout<<"str的长度为:"<<strlen(str)<<endl;

         return 0;

}

注:该函数与strcpy()的适用条件类似,其并不需要#include <string>的支持,而且注意,strlen()函数所针对的对象为char,而不是string.

 实例57:字符串的比较(strcmp()

#include <iostream>

using namespace std;

//字符串的比较(strcmp()

int main()

{

         char str1[]="HelloWorld";

         char str2[]="Hello World";

         int result;

         result=strcmp(str2, str1);

          if(result<0)

                   cout<<"str2小于str1"<<endl;

         else if(result>0)

                   cout<<"str2大于str1"<<endl;

         else

                   cout<<"str2等于str1"<<endl;

          return 0;

}

注:关键介绍了strcmp()的使用,同样是C风格的函数,适用于char型字符数组。注意,大小写在此也会有影响,如字符串AAA要小于aaa

 

实例58:连接两个字符串(strcat())

#include <iostream>

using namespace std;

int main()

{

         char str1[100]="Hello";//一定要给str1的大小赋值,否则会越界

         char str2[]=" World";

          strcat(str1,str2);

         cout<<str1<<endl;

         return 0;

}

注:同样也是C风格的函数,输出的结果是Hello World。注意str1为最终的容纳字符串,所以需要提前定义清楚大小。

 

实例59:将小写字符转换为大写(strupr()

#include <iostream>

using namespace std;

 //将小写字符转换为大写(strupr()

int main()

{

         char str[]="Hello World";

         cout<<strupr(str)<<endl;

          return 0;

}

注:char型数组可以当做char指针使用,即,定义了char str[]后,直接用str也可以表示一个char型数组。如将代码改为如下:

#include <iostream>

using namespace std;

 int main()

{

         char str[]="Hello World";

                   cout<<str<<endl;

         cout<<strupr(str)<<endl;

                   cout<<str<<endl;

         return 0;

}

可以看到,输出的值为

可见,str其实就是一个字符串指针,在strupr()函数对其进行改变后,再次输出其时也是发生改变后的值。

 实例60:使用C++字符串类string打印字符串

#include <iostream>

#include <string>

using namespace std;

//使用C++字符串类string打印字符串

int main()

{

         string str("HelloWorld1234");

         //string str="Hello World123";

         cout<<str<<endl;

                   return 0;

}

注:此例主要记住两点,一是string函数的定义,可以用传统的string str="Hello World123";也可以用构造函数实现        string str("HelloWorld1234");

二是输出string时,可以直接输出为 cout<<str<<endl;

 

  评论这张
 
阅读(26)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016