C++求助,应该算是很基础的一个作业

来源:百度知道 编辑:UC知道 时间:2024/05/20 16:36:28
刚学C++一个星期,老师就出了个作业,可我一点都不会啊..但不交的话这门课就不能PASS了..所以请各位达人帮帮忙拉,13号这个作业就要交了....

作业主要是说输入一个名字会自动出来一个密码的,要求如下:
1. 找出名字中小写字母的数量
2. 每个字母的ASCII值的总和
3. 找出这个名字中哪个字母是26个字母表最后一个字母
4.找出名字中有多少个字母是不同的
5. (这个要求说不清,我在后面举个例子..^_^)

举例:
假设输入David,
1. 小写字母数量就是4
2.David的ASCII值就是68 97 118 105 100,总和就是488
3. 字母表中最后的一个字母是小写的v,v的ASCII值是118
4. David中有4个不同的字母,所以显示4
5. 以0和1显示的话,David的ACSII值是:1000100,1100001,1110110,1101001,1100100
1的数量就是2,3,5,4,3,总和就是17.

所以显示出来的就是综合上面的:
4
488
118
4
17

如果有谁能帮我做一下十分感谢啊....发EMAIL给我也可以,拜托了,我不想FAIL...

#include <iostream>
using namespace std;
int main(void)
{
char name[50];
char *p;
int n[5];
int t;
bool have[26];
cin>>name;
p=name;
for(t=0;t<5;t++)n[t]=0;
for(t=0;t<26;t++)have[t]=false;

for(;*p!='\0';p++)
{
if(*p<'A'||*p>'z'||(*p>'Z'&&*p<'a')){cout<<"Input Err"<<endl;exit(1);}

if(*p>'Z')n[0]++;

n[1]+=*p;

do
{
if(n[2]<='Z'&&*p>'Z'){if(*p-32>n[2])n[2]=*p;break;}
if(n[2]>'Z'&&*p<='Z'){if(*p+32>n[2])n[2]=*p;break;}
if(*p>n[2])n[2]=*p;
}while(false);

(*p<='Z')?(t=*p-'A'):(t=*p-'a');
if(!have[t])n[3]++;
have[t]=true;

for(t=*p;t>0;t/=2) if(t%2==1)n[4]++;
}

for(t=0;t<5;t++)cout<<n[t]<<endl