1、输入学生信息,姓名 成绩(成绩的数目不一定)
输出每个学生的学号和平均成绩,以及不及格课程数超过2的学生,按不及格课程数从大到小排好序输出。
#include<iostream>
#include<string>
#define MAX 100
using namespace std;
struct Student{
string name;
int score[100];
int total;//该学生总共的科目数
int fail;//该学生不及格的科目数
};
//写法一:用数组
int main()
{
Student stus[MAX];
int i=0;
//输入
while(i<MAX)
{
cout<<"name:";
cin>>stus[i].name;
if(stus[i].name == "#") break;
int total=0;
do{
total++;
cout<<"score:";
cin>>stus[i].score[total];
if(stus[i].score[total]<60&&stus[i].score[total]>0) stus[i].fail++;
cout<<stus[i].score[total];
}while(stus[i].score[total]>0);
stus[i].total = total;
i++;
}
int stucount = i;
//遍历输出
// while(i>0)
// {
// i--;
// cout<<stus[i].name<<' ';
// int p=1;
// while(p<stus[i].total)
// {
// cout<<stus[i].score[p]<<' ';
// p++;
// }
// cout<<"fail:"<<stus[i].fail;
// cout<<endl;
// }
cout<<"不及格科目超过2的学生为:";
for(int p=0;p<stucount;p++)
{
if(stus[p].fail>2)
{
cout<<stus[p].name<<' ';
}
}
cout<<endl;
for(int q=0;q<stucount;q++)
{
cout<<stus[q].name<<"不及格科目数"<<stus[q].fail<<endl;
}
return 0;
}
2、输入字符串,输出字符串中包含的数字,比如 2.3ABC0-2.3 输出 2.3 0 -2.3。
注意一些特殊的情况如+004.500值为+4.5。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string input;
cin>>input;
char array[input.length()];
//逐个输出字符串中每个字符
// int i=0;
// while(i<input.length())
// {
// cout<<input[i++]<<endl;
// }
int i=0,j=0;
while(i<input.length())
{
if(input[i]>='0'&&input[i]<='9')
{
array[j++]=input[i];
}
else if(input[i]=='.')
{
if((input[i-1]==array[j-1])&&(input[i+1]>='0'&&input[i+1]<='9'))//说明小数点前后一位是数字
{
array[j++]=input[i];
}
}
else if((input[i]=='+')||(input[i]=='-'))
{
if(input[i+1]>='0'&&input[i+1]<='9')
{
j++;
array[j++]=input[i];
}
}
else
{
if(array[j-1]!=' ') array[j++]=' ';
}
i++;
}
//cout<<"array:"<<array<<endl;
//处理多余的0
//
cout<<"000000";
int first=0;
for(int t=1;t<sizeof(array);t++)//找到第一个非零的数
{
cout<<"t:"<<t<<" "<<array[t]<<endl;
if((array[t]>='1'&&input[t]<='9')||(array[t]=='.'))
{
cout<<t<<endl;
first=t;
break;
}
}
int last;
if(array[first]=='.')
{
//从后往前找到最后一个非0的数
for(int m=sizeof(array)-1;m>first;m--)
{
cout<<"m:"<<m<<" "<<array[m]<<endl;
if(array[m]>='1'&&input[m]<='9')
{
last = m;
break;
}
}
first-=2;
}
cout<<first<<' '<<last<<endl;
//把first位置之前,空格之后的元素清除;把last之后,空格之前的元素清除------清除即变成空格
for(int v=first;array[v]!=' '&&array[v]!='+';v--)
{
cout<<v<<':'<<array[v];
array[v]=' ';
}
for(int v=last;array[v]!=' '&&array[v]!='+';v++)
{
array[v]=' ';
}
for(int p=0;p<sizeof(array);p++)
{
cout<<array[p];
}
return 0;
}