accelerated C++后感

#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的值(这里是字符串类型)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值