1、存储一组姓名,如Apple,Tom,Green,Jack要求能排序、按字母顺序插入、并显示。
#include <cstdio>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
void Print(vector<string> vi)
{
vector<string>::iterator it;
for(it=vi.begin();it!=vi.end();it++)
{
cout<<(*it)<<" ";
}
cout<<endl;
}
int main()
{
vector<string > vi;
string str;
while(1)
{
cout<<"请输入"<<endl;
cin>>str;
if(str=="#")
break;
vi.push_back(str);
sort(vi.begin(),vi.end());
Print(vi);
}
}
2、输入文件名及路径创建该文件,并把从键盘输入的内容保存到该文件,最后将该文件的路径、该文件名及文件中的内容输出到屏幕。
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
int main()
{
string filename,add,address;
char text[100];
cout<<"请输入文件名"<<endl;
cin>>filename;
cout<<"请输入文件路径"<<endl;
cin>>add;
getchar();
address+=add;
address+="/";
address+=filename;
FILE *fp;
if(!(fp=fopen(address.c_str(),"w")))
cout<<"打开失败"<<endl;
cout<<"请输入内容"<<endl;
while(1)
{
gets(text);
if(strcmp(text,"#")==0)
break;
fprintf(fp,text);
fprintf(fp,"\n");
}
fclose(fp);
cout<<"文件地址:"<<add<<" 文件名"<<filename<<endl;
cout<<"文件内容:"<<endl;
if(!(fp=fopen(address.c_str(),"r")))
cout<<"打开失败"<<endl;
while(fgets(text,200,fp)!=NULL)
{
cout<<text;
}
fclose(fp);
return 0;
}
3、设计捕获两种不同类型的异常,一个是被0除,另一个是数组越界。
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
cout<<"请输入除数和被除数\n"<<endl;
int a,b;
cin>>a>>b;
try
{
if(b==0)
throw "除数为空\n";
else
{
cout<<a/b<<endl;
}
cout<<"\n请输入数组长度\n";
int n;
cin>>n;
cout<<"请输入要访问的数组下标\n"<<endl;
cin>>a;
if(a>=n||a<0)
throw "非法访问\n";
}
catch(char *e)
{
cout<<e<<endl;
}
}
4、设计一个程序能计算日期的间隔,如输入两个日期分别为2008-2-3和2008-3-9计算相隔多少天,或2008-2-3加上100天后的日期是多少。
#include <cstdio>
#include <algorithm>
using namespace std;
bool IsRunnian(int year)
{
if(year%4==0 && year%100!=0|| year%400==0)
return true;
return false;
}
typedef struct
{
int year;
int month;
int day;
}date;
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int judge(date d1,date d2) //d1大返回1,相等返回0,d2大返回-1
{
if(d1.year>d2.year)
return 1;
if(d1.year<d2.year)
return -1;
if(d1.month>d2.month)
return 1;
if(d1.month<d2.month)
return -1;
if(d1.day>d2.day)
return 1;
if(d1.day<d2.day)
return -1;
return 0;
}
int getday(date d1,date d2)
{
int day=0;
if(judge(d1,d2)==1)
swap(d1,d2);
for(;d1.year!=d2.year;d1.year++)
{
if(IsRunnian(d1.year)&& d1.month<=3)
day+=366;
else
day+=365;
}
if(IsRunnian(d1.year))
month[2]=29;
else
month[2]=28;
if(d1.month>d2.month)
{
for(;d2.month!=d1.month;d2.month++)
{
day-=month[d2.month];
}
}
if(d1.month<d2.month)
{
for(;d1.month!=d2.month;d1.month++)
{
day+=month[d1.month];
}
}
day+=(d2.day-d1.day);
return day;
}
void getday(date &d1,int d)
{
if(IsRunnian(d1.year))
month[2]=29;
else
month[2]=28;
while(d>0)
{
if(d>=month[d1.month])
{
d-=month[d1.month];
d1.month++;
if(d1.month>12)
{
d1.month=1;
d1.year++;
if(IsRunnian(d1.year))
month[2]=29;
else
month[2]=28;
}
if(d1.day>month[d1.month])
{
d+=(d1.day-month[d1.month]);
d1.day=month[d1.month];
}
}
else
{
d--;
d1.day++;
if(d1.day>month[d1.month])
{
d1.month++;
d1.day=1;
}
if(d1.month>12)
{
d1.year++;
d1.month=1;
}
}
}
}
int main()
{
int choose;
date d1,d2;
while(1)
{
printf("1,计算间隔。2、计算日期。3、退出\n");
scanf("%d",&choose);
if(choose==1)
{
printf("请输入两个日期\n");
scanf("%d-%d-%d",&d1.year,&d1.month,&d1.day);
scanf("%d-%d-%d",&d2.year,&d2.month,&d2.day);
printf("%d\n",getday(d1,d2));
}
if(choose==2)
{
printf("请输入时间和间隔日期,例如2018-1-1+100\n");
int d;
char c;
scanf("%d-%d-%d%c%d",&d1.year,&d1.month,&d1.day,&c,&d);
getday(d1,d);
printf("%d-%d-%d\n",d1.year,d1.month,d1.day);
}
}
}