题目来源:https://blog.youkuaiyun.com/u014552756/article/details/60801051
代码原创
1.学生成绩
#include<bits/stdc++.h>
using namespace std;
struct student{
string name;
vector<int> score;
double average;
int failed = 0;
};
bool cmp(student a, student b){
return a.failed > b.failed;
}
void print(student a){
cout<<a.name<<" : ";
for(int i = 0; i < a.score.size(); i++){
cout << a.score[i] << " ";
}
cout << "average : " <<a.average << " failed:" << a.failed << endl;
}
int main(){
student tmp;
vector<student> list;
while(cin >> tmp.name){
//memset(&tmp,0,sizeof(tmp));
memset(&tmp.score,0,sizeof(tmp.score));
tmp.failed = 0;
int i = 0;
int sum = 0;
while(getchar()!='\n'){
int s_tmp = 0;
scanf("%d",&s_tmp);
sum += s_tmp;
tmp.score.push_back(s_tmp);
if(s_tmp < 60){
tmp.failed++;
}
i ++;
}
tmp.average = sum * 1.0 / i;
list.push_back(tmp);
}
for(int i = 0; i < list.size(); i++){
print(list[i]);
}
sort(list.begin(), list.end(), cmp);
for(int i = 0; i < list.size(); i++){
print(list[i]);
}
return 0;
}
2.提取字符串中的数字
#include<bits/stdc++.h>
using namespace std;
void print(string &s){
//处理零和小数点之后输出
if(s.length() == 1){
cout << s << endl;
return;
}
//处理前置0
int i = 0;
if(s[0] == '+' || s[0] == '-')
i = 1;
while(s[i] == '0'){
s.erase(s.begin()+i);
}
if(s[0] == '.'){//如果是0.xx的情况,把0补回来
s.insert(s.begin(),'0');
}
//如果是小数则处理后置0
bool mark = 0;
for(int j = 0; j < s.length(); j++){
if(s[j] == '.'){
mark = 1;
break;
}
}
if(mark){
i = s.length() - 1;
while(s[i] == '0'){
s.erase(s.begin()+i);
i--;
}
if(s[s.length()-1] == '.')
s.erase(s.end()-1);
}
cout << s << endl;
s = "";
return;
}
int main(){
string input;
cin >> input;
string num;
bool flag = 0;
for(int i = 0; i < input.length(); i++){
if(input[i] == '+' || input[i] == '-' || (input[i] >= '0' && input[i] <= '9')){
num += input[i++];
while(input[i] == '.' || (input[i] >= '0' && input[i] <= '9')){
num += input[i++];
}
print(num);
}
}
return 0;
}