#include <iostream>
#include <string>
using namespace std;
int main()
{
cout << "Please enter your name: ";
string name;
cin >> name;
const string greeting = "Hello, " + name + "!";
const string spaces(greeting.size(), ' ');
const string second = "*" + spaces + "*";
const string first(second.size(), '*');
cout << endl;
cout << first << endl;
cout << second << endl;
cout << "*" << greeting << "*" << endl;
cout << second << endl;
cout << first << endl;
cout <<"试一试"<<first+greeting+second<<endl;
return 0;
}
eg:std::str(10,*);//-->str=十个*
s+t直接就是两个字符串无缝衔接(不过好像有限制?
x op=y == x=xopy(op为算术运算符或者移位符)
size_t是无符号整数类型(确保在不同平台上对内存大小的表示方式是一致的,从而提高了代码的可移植性)
#include <algorithm>
#include <iostream>
#include <string>
#include <ios>
#include <iomanip>
#include <vector>
using namespace std;
int main()
{
cout<<"Please enter your midterm and final exam grades:";
double midterm ,final;
cin>>midterm>>final;
cout<<endl;
cout<<"Please enter all your homework grades,"
"follow by end-of-file:";
vector<double> homework;
double x;
while(cin>>x)
{
homework.push_back(x);
}
typedef vector<double>::size_type vec_sz;
vec_sz size = homework.size();
if(size==0)
{
cout<<endl<<"You must enter your gardens.Please try again."<<endl;
return 1;
}
sort(homework.begin(),homework.end());
vec_sz mid=size/2;
double median;
median=size%2 == 0? (homework[mid]+homework[mid-1])/2:homework[mid];
streamsize prec = cout.precision();
cout<<"Your final grade is "<<setprecision(3)
<<0.2*midterm+0.4*final+0.4*median
<<setprecision(prec)<<endl;
return 0;
}
#include <algorithm>//提供了一些常用的算法,比如sort()用于排序容器中的元素
#include <iomanip> //提供了一些用于格式化输出的函数,比如setprecision()用于设置输出的精度
sort(homework.begin(),homework.end());//非递减排序
median=size%2 == 0? (homework[mid]+homework[mid-1])/2:homework[mid];//ture是前者,false是后者
streamsize prec = cout.precision(); //streamsize这个相当于int,这一步属于是很专业的,保存了当前输出流的精度(即默认精度)到变量prec
setprecision(prec)<<endl; //然后由setprecision(prec)使用之前保存的原始精度值(存储在prec变量中)将输出流的精度恢复到原始状态
v.begin()返回一个数值,指示v的第一个元素,而v.end()则反之
vector<T> v创建一个空可以保存T类型的向量
#include<algorithm>
#include<iomanip>
#include<iostream>
#include<stdexcept>
#include<vector>
using namespace std;
struct Student_info
{
string name;
double midterm,final;
vector<double> homework;
};
double median(vector<double> vec)
{
int size=vec.size();
if(size==0)
{
throw domain_error("it is empty");
}
sort(vec.begin(),vec.end());
int mid=size/2;
return size%2==0? (vec[mid]+vec[mid-1])/2:vec[mid];
}
double grade(double midterm,double final,double homework)
{
return 0.2*midterm+0.4*final+0.4*homework;
}
double grade(double midterm,double final,const vector<double>& hw)
{
if(hw.size()==0)
{
throw domain_error("it is empty2");
}
return grade(midterm,final,median(hw));
}
double grade(const Student_info& s)
{
return grade(s.midterm, s.final, s.homework);
}
istream& read_hw(istream& in,vector<double>& hw)
{
if(in)
{
hw.clear();
double x;
while(in>>x)
{
hw.push_back(x);
}
in.clear();
}
return in;
}
istream& read(istream& is,Student_info& s)
{
is >> s.name>>s.midterm>>s.final;
read_hw(is,s.homework);
return is;
}
bool compare(const Student_info& x,const Student_info& y)
{
return x.name<y.name;
}
int main()
{
vector<Student_info> students;
Student_info record;
string::size_type maxlen=0;//这一步很关键,下面的类型比较就一样了
cout<<"请输入学生姓名、平时成绩、期末成绩、全部的家庭成绩:"<<endl;
while(read(cin,record))
{
maxlen=max(maxlen,record.name.size());
students.push_back(record);
}
sort(students.begin(),students.end(),compare);
for (vector<Student_info>::size_type i = 0; i != students.size(); ++i)
{
cout<<students[i].name
<<string(maxlen+1-students[i].name.size(),' ');
try {
double final_grade = grade(students[i]);
streamsize prec = cout.precision();
cout << setprecision(3) << final_grade << setprecision(prec);
} catch (domain_error e) {
cout << e.what();
}
cout<<endl;
}
return 0;
}
struct字如其名:结构,一种包含多种类型成员的类型(注意最后结束要 ; )
compare中的s1<s2(通过字典排序法来比较字符串), 再由sort+后缀为compare来借此排序
#include <iomanip>:控制小数点后的精度、设置字段宽度等
#include <algorithm>: 用于在容器中执行各种操作,例如查找、排序、合并等。这些算法函数可以应用于不同类型的容器,如数组、向量、列表等
#include <stdexcept>: 它定义了一些标准异常类。异常是程序在执行过程中遇到的错误或意外情况,当出现异常时,可以通过抛出异常对象来传递错误信息,然后通过捕获异常对象来处理错误。stdexcept头文件定义了一些常见的异常类,如逻辑错误(logic_error)、运行时错误(runtime_error)等
#include<iostream>
#include<vector>
#include<cctype>
#include<string>
#include<algorithm>
using namespace std;
vector<string> split(const string& s)
{
vector<string> ret;
int i=0;
while(s[i])
{
while(i!=s.size()&&isspace(s[i]))//先寻找首字母
{
i++;
}
int j=i;
while(j!=s.size()&&!isspace(s[j]))//再寻找空格来以此结束
{
j++;
}
if(i!=j)
{
ret.push_back(s.substr(i,j-i));//导入单词到ret
i=j;
}
}
return ret;
}
string::size_type width(const vector<string>& v)
{
string::size_type maxlen=0;
for(int i=0;i<v.size();i++)
{
maxlen=max(maxlen,v[i].size());
}
return maxlen;
}
bool compare(const string& x,const string& y)
{
return x<y;
}
int main()
{
string s;
while(getline(cin,s))
{
vector<string> ret;
vector<string> v=split(s);
sort(v.begin(),v.end(),compare);
int maxlen = width(v);
string border(maxlen+4,'*');
ret.push_back(border);
for(int i=0;i<v.size();i++)
{
ret.push_back("* "+v[i]+string(maxlen-v[i].size(),' ')+" *");
}
ret.push_back(border);
for(int i=0;i<ret.size();i++)
{
cout << ret[i] << endl;
}
}
}
- ret.push_back(s.substr(i,j-i))
- .push_back是将()里面的元素导入ret中
- .substr是将s中的i位元素开始进行j-i位的元素归为一体
- getline(is,s)从is读一行输入并储存于s中
- s+=s2用s+s2替代s的值(这里是字符串类型)
1093

被折叠的 条评论
为什么被折叠?



