高分求C++编程题(二道)

使用指针完成以下编程题目:
1. 从键盘输入一个字符串,求字符串中各种数据的个数。这些数据分别是:大写字母、小写字母、数字、空格及其它字符共5种。
2. 编程序将给定字符串中指定字符删除。要求删除指定字符后原字符串不能留下空位置,字符串和指定字符均由键盘输入。
一定要用指针的方法!

第1个回答  2008-05-15
//我将两题和在了一起
#include<iostream.h>
#include <string.h>
#include <stdlib.h>
char *fun(char *,char ); //前向声明函数
void main()
{
cout<<"请输入一个字符串,以回车结束:"<<endl;
char st[100];
cin.getline(st,100,'\n');
int AZ=0,az=0,num=0,none=0,els=0; //定义分别给大写,小写,数字,空格和其它字符的计数变量
for(int i=0;st[i]!='\0';i++)
{
if('A'<=st[i] && 'Z'>=st[i])
AZ++;
else if('a'<=st[i] && 'z'>=st[i])
az++;
else if('0'<=st[i] && '9'>=st[i])
num++;
else if(' '==st[i])
none++;
else
els++;
}
cout<<"大写字母个数:"<<AZ<<endl;
cout<<"小写字母个数:"<<az<<endl;
cout<<"数字个数:"<<num<<endl;
cout<<"空格个数:"<<none<<endl;
cout<<"其它字符个数:"<<els<<endl;

cout<<"请输入你要删除的字符:";
char temp;
cin>>temp;
fun(st,temp);
cout<<"删除字符'"<<temp<<"'后字符串为:"<<endl<<st<<endl;
}
char *fun(char *s,char t)
{
if(strlen(s)==0)
{
cout<<"你之前没有输入任何字符串,系统自动退出。"<<endl;
exit(0);
}
else
{
for(int i=0;s[i]!='\0';i++)
if(s[i]==t)
for(int k=i;s[k]!='\0';k++)
s[k]=s[k+1];
}
return s;
}
第2个回答  2008-05-17
纯指针方法修改完毕。

第一题:

#include <iostream>
#include <string.h>
#include <ctype.h>
using namespace std;

int main()
{
char s[80];
gets(s);

int i,upper,lower,number,space,other;
upper=lower=number=space=other=0;
char *p;
for(p=s;*p;p++)
{
if(isupper(*p)) upper++;
else if(islower(*p)) lower++;
else if(isdigit(*p)) number++;
else if(isspace(*p)) space++;
else other++;
}

cout<<"大写字母有"<<upper<<"个"<<endl;
cout<<"小写字母有"<<lower<<"个"<<endl;
cout<<"数字有"<<number<<"个"<<endl;
cout<<"空格有"<<space<<"个"<<endl;
cout<<"其他有"<<other<<"个"<<endl;

return 0;
}

第二题:

#include <iostream>
#include <string.h>
using namespace std;

void Func(char *p)
{
for(;*p;p++)
*p=*(p+1);
*p='\0';
}

int main()
{
char s[80],ch;

cout<<"请输入字符串: "; cin.getline(s,80);
cout<<"请输入指定字符: "; cin>>ch;

char *p;
for(p=s;*p;p++)
if(*p==ch) Func(p);

puts(s);
return 0;
}本回答被提问者采纳
第3个回答  2008-05-15
#include <iostream>

using namespace std;
const int IsUpper=0;
const int IsLower=1;
const int IsNumber=2;
const int IsSpace=3;
const int IsOther=4;

class String
{
public:
String(char *init);
~String();
void GetSeperate();
void DeleteChar();
void Display();
private:
void Delete(char target);
int GetCharNumber(char target);
int GetCharType(char target);
char *itsChar;
int StringLength;
};

String::String(char *init)
{
int i;
for(i=0;init[i]!='\0';i++);
StringLength=i;//ABCD->length=4,space=5;0-4
itsChar=new char[i+1];
for(i=0;init[i]!='\0';i++)
{
itsChar[i]=init[i];
}
itsChar[i]='\0';
}
String::~String()
{
}

void String::Display()
{
cout<<itsChar<<"\n";
}

void String::GetSeperate()
{
int i;
int chartypecount[5]={0,0,0,0,0};//0:upper,1:lower,2:number,3:space,4:other
int chartype;
for(i=0;i<StringLength;i++)
{
chartype=GetCharType(itsChar[i]);
chartypecount[chartype]++;
}
cout<<"AI:Upper:"<<chartypecount[0]<<"\n";
cout<<"AI:Lower: "<<chartypecount[1]<<"\n";
cout<<"AI:Number: "<<chartypecount[2]<<"\n";
cout<<"AI:Space: "<<chartypecount[3]<<"\n";
cout<<"AI:Other "<<chartypecount[4]<<"\n";
}

int String::GetCharType(char target)
{
if(('A'<=target)&&(target<='Z'))
return IsUpper;
else if(('a'<=target)&&(target<='z'))
return IsLower;
else if(('0'<=target)&&(target<='9'))
return IsNumber;
else if((target==' '))
return IsSpace;
else
return IsOther;
}

void String::DeleteChar()
{
char temp;
cout<<"AI:Input the char you want to delete\n>";
cin>>temp;
Delete(temp);
}

void String::Delete(char target)
{
int deleted=0;
int i,j;
for(i=0;i<StringLength;i++)
{
if(itsChar[i]==target)
{
for(j=i;j<StringLength;j++)
{
itsChar[j]=itsChar[j+1];
}
StringLength--;
deleted=1;
}
}
if(deleted!=1)
{
cout<<"AI:No Such Charecter\n";
}
}
int main()
{
String *A;
char input[100];
cout<<"AI:Put~In~String:\n>";
cin.getline(input,100,'\n');
A=new String(input);
A->GetSeperate();
A->DeleteChar();
A->Display();
return 0;
}
第4个回答  2008-05-15
第一题知道ASCII的值就可以分类输出。
第二题是查找删除问题,注意删除后将删除单元后的元素全部前移一位,
很简单的,自己看看书上上机做出来最好,程序是自己写出来的,写多了就会了,呵呵
祝你成功
第5个回答  2008-05-15
哇!
相似回答
大家正在搜