那位大大能帮忙看一下下面这段程序错误到底出在那里,怎样修改它?

来源:百度知道 编辑:UC知道 时间:2024/06/02 04:21:52
#include "stdafx.h"

#include"iostream"
#include"string.h"
using namespace std;

void main()
{ char r[26];
int i=0;int j=0;
char *p1=NULL;
p1=new char[];

int a=0;int b=0;

cout<<"请输入一串字符:"<<endl;
cin>>p1;
b=(int)strlen(p1);
for(j=0;j<=25;j++)
r[j]='0';

for(i=0;i<=b;i++)
{
if(p1[i]>='A'&&p1[i]<='Z')
a=p1[i]-65;
r[a]=p1[i];
}
for(j=0;j<=25;j++)
if(r[j]!='0')
cout<<r[j];
}
它是从键盘输入一串字符,然后只是显示不重复的大写的字母

是用原来我的思想实现的吧,代码两个小的不足:
第一:
只有当条件 (p1[i]>='A'&&p1[i]<='Z') 成立的时候才能执行
a=p1[i]-65;
r[a]=p1[i];
这里要加大括号

第二
for(i=0;i<=b;i++)
这里 i<b 就可以了,因为 p1[b] = '\0' 的
当然这个地方改与不改没有关系

————————
代码修改如下:
#include "stdafx.h"

#include"iostream"
#include"string.h"
using namespace std;

void main()
{ char r[26];
int i=0;int j=0;
char *p1=NULL;
p1=new char[];

int a=0;int b=0;

cout<<"请输入一串字符:"<<endl;
cin>>p1;
b=(int)strlen(p1);
for(j=0;j<=25;j++)
r[j]='0';

for(i=0;i<b;i++)
{
if(p1[i]>='A'&&p1[i]<='Z')
{
a=p1[i]-65;
r[a]=p1[i];
}
}
for(j=0;j<=25;j++)
if(r[j]!='0')
cout<<r[j];
}