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;
}