记:全部题目连接
https://blog.csdn.net/u014552756/article/details/78505845
,题目来源于博主“我还在路上呢”,我根据个人对题目的理解写了一下题解代码,分享在博客上,如代码写的有问题希望大家指正,后期会不定时更新。
1、输入学生信息,姓名 成绩 输出每个学生的学号和平均成绩,以及不及格课程数超过2的学生,按不及格课程数从大到小排好序输出。
#include <iostream>
#include <algorithm>
using namespace std;
struct Info{
char name[20];
string num;//学号
float score[100];
int count;//不及格课程数
float ave;//平均成绩
int n;//科目分数个数
};
bool cmp(Info a,Info b)
{
return a.count>b.count;
}
int main()
{
cout<<"请输入学生个数:";
int t;
cin>>t;
Info stu[t];
for(int q=0;q<t;q++)
{
stu[q].count=0;//此处如果不进行初始化会出现值无法控制的情况
}
cout<<"请分别输入每个学生的姓名,学号,科目数,每门课的分数"<<endl;
for(int i=0;i<t;i++)
{
int sum=0;
cin>>stu[i].name>>stu[i].num>>stu[i].n;
for(int j=0;j<stu[i].n;j++)
{
cin>>stu[i].score[j];
if(stu[i].score[j]<60)
stu[i].count++;
sum=sum+stu[i].score[j];
}
stu[i].ave=sum/stu[i].n;
}
cout<<"不及格科目数超过2的学生为:";
for(int k=0;k<t;k++)
{
if(stu[k].count>2)
cout<<stu[k].name<<" ";
}
cout<<endl;
sort(stu,stu+t,cmp);
for(int k=0;k<t;k++)
{
cout<<stu[k].name
<<" 学号为:"<<stu[k].num
<<" 平均成绩为:"<< stu[k].ave
<<" 不及格的科目数:"<<stu[k].count<<endl;
}
return 0;
}
2、输入字符串,输出字符串中包含的数字,比如 2.3ABC0-2.3 输出 2.3 0 -2.3。注意一些特殊的情况如+004.500值为+4.5。
记:此题看了别人的解题思路,用到了string字符串的常用处理函数,erase和insert,我总结了下其具体用法如下:
(1)erase有两种用法:删除单个元素和删除一个区间内的所有元素。
删除单个元素时的语法为:str.erase(it);it为需要删除的元素的迭代器,例如:str.erase(str.begin()+i);其中i为要删除的元素的下标,可以用变量值来灵活代替使用。
删除一个区间内的所有元素:str.erase(first,last);first为所要删除区间的起始迭代器,last为索要删除区间的末尾迭代器。例如:str.erase(str.begin()+1,str.end()-1)。 另一种写法为str.erase(pos,length);pos为要删除元素的起始位置,length为删除的字符个数,例如:str.erase(2,3);即从2号位开始删除3个元素。
(2)insert的常用写法为:str.insert(pos,string);在pos位置插入字符串string。例如:string s=”123″; string str=”456″;s.insert(3,str);结果为:123456
#include <iostream>
#include <string.h>
using namespace std;
void shuchu(string &s)
{
//处理0
if(s.length()==1)
{
cout<<s<<endl;
s="";
return;
}
//处理前缀0
int i=0;
if(s[0]=='+'||s[0]=='-')
i=1;
while(s[i]=='0')
{
s.erase(s.begin()+i);
}
if(s[0]=='.')
s.insert(s.begin(),'0');
//处理后缀0,为小数的情况才存在后缀0
bool flag=0;
for(int j=0;j<s.length();j++)
{
if(s[j]=='.')
{
flag=1;
break;
}
}
if(flag)
{
i=s.length()-1;
while(s[i]=='0')
{
s.erase(s.begin()+i);
i--;
}
if(s[s.length()-1]=='.')//当为0.00000的情况
{
s.erase(s.end()-1);
}
}
cout<<s<<endl;
s="";
return;
}
int main()
{
string str,temp;
cin>>str;
int len=str.length();
for(int k=0;k<len;k++)
{
if(str[k]=='+'||str[k]=='-'||(str[k]>='0'&&str[k]<='9'))
{
temp+=str[k++];
while(str[k]=='.'||(str[k]>='0'&&str[k]<='9'))
{
temp+=str[k++];
}
// cout<<temp<<"**"<<endl;
shuchu(temp);
}
}
return 0;
}