原生泰博客:C++求助,应该算是很基础的一个作业

来源:百度文库 编辑:高考问答 时间:2024/05/03 03:29: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;
cin.ignore();
return 0;
}

很简单,用一个数组也行,用字符串变量也行。用来存储david。
1、然后分别判断每一个元素的ascii码的值是否小于大小写字母的分界线的那个值
2、将每个元素的码值相加
等等,难道是不难就是挺麻烦的,每一个问题都是一个基于ascii码的判断比较问题。
谢谢

/*举例:
假设输入David,
1. 小写字母数量就是4 a[0]
2.David的ASCII值就是68 97 118 105 100,总和就是488 a[1]
3. 字母表中最后的一个字母是小写的v,v的ASCII值是118 a[2]
4. David中有4个不同的字母,所以显示4 a[3]
5. 以0和1显示的话,David的ACSII值是:1000100,1100001,1110110,1101001,1100100
1的数量就是2,3,5,4,3,总和就是17. a[4]*/
#include<iostream>
using namespace std;
void main(void)
{
char name[100];
int len,i,a[5];
char c; /*最大字母*/
bool b[26];
cout<<"Input name: ";
cin>>name;
len=strlen(name);
for(i=0; i<5; i++)
a[i]=0;
for(i=0; i<26; i++) /*用于判断不同字母的个数,若存在则相应位为true*/
{ b[i]=false;
}

for(i=0; i<len; i++) /*判断输入是否符合规定(全是由字母组成)*/
{
if(name[i]>='a' && name[i]<='z' || name[i]>='A' && name[i]<='Z')
{
}
else
{ cout<<"input error!"<<endl;
return;
}
}

c=name[0];
for(i=0; i<len; i++)
{
for(int j=name[i]; j>0; j/=2) /*对每个字母的ASCII中含有的二进制1进行计数*/
{ if(j%2==1)
a[4]++;
}

if(name[i]>='a' && name[i]<='z') /*小写字母计数*/
a[0]++;
a[1]+=name[i]; /*字母ASCII总和*/
if(name[i]>='a' && name[i]<='z')
{ b[name[i]-'a']=true;
if(c>='a' && c<='z')/*查找最大字母*/
{ if(c<name[i])
c=name[i];
}
else
{ if(c< (name[i]-32))/*查找最大字母*/
c=name[i];
}
}
else if(name[i]>='A' && name[i]<='Z')
{ b[name[i]-'A']=true;
if(c>='A' && c<='Z') /*查找最大字母*/
{ if(c<name[i])
c=name[i];
}
else
{ if(c< (name[i]+32))/*查找最大字母*/
c=name[i];
}
}

}
a[2]=c;
for(i=0; i<26; i++) /*对不同字母出现的个数进行统计。*/
if(b[i]==true)
a[3]++;

for(i=0; i<5; i++) /*输出结果*/
cout<<a[i]<<endl;
}