#include <iostream>
#include <cstring>
using namespace std;
class filter
{
public:
char a[100];
char b[27];
filter()
{
cout<<"请输入一串英文字符:"<<endl;
cin>>a;
int i,j;
for(i=0; i<=strlen(a); i++) //对a数组中的相同字母进行筛选
{
for(j=0; j<i; j++)
{
if(a[j]==a[i]) //相同的字母筛选掉
{
break;
}
}
if(j==i) //否则存入b数组
{
b[strlen(b)]=a[i];
}
/*for(j=0; j<i; j++)
{
if(a[j]==a[i])
{
break;
}
}
if(j==i)
{
cout<<a[i];
}*/
}
for(int k=0;k<27;k++) //输出b数组
cout<<b[k];
}
};
int main()
{
filter f1;
}
如上面的代码,为什么输出会乱码?
你这程序有很大问题,各方面都不严谨
我先回答你所说的乱码问题:
{
你定义了一个char b[27] 然后你写了这行代码: for(int k=0;k<27;k++) cout<<b[k];
你有没有考虑如果相同的字母没有27个,也就是说b字符数组没有被填满,比如只有前十个被被放入了字母,那么b[10] b[11] b[12]........这里面是什么?
乱码就是因为这个。
}
然后我们来谈谈其他的
{
1.这个构造函数很强
2.在注释为(否则存入b数组)这里你不觉得应该是if(j!=i)吗?
3.还是注释为(否则存入b数组)这里,if下面b[strlen(b)]=a[i],真的挺巧妙的,不过我觉得直接定义一个int x=0;然后b[x++]=a[i]也挺不错。
4.你有没有考虑如果同一个字母不止出现两次,如果出现三次四次呢?那按照这个程序b数组里也会重复出现一个字母吗?
5.这里用string类型不错,建议你去看看.
}
我想你说的乱码可能是指的中文的问题,两个选择,1是把其中的中文改成英文,二是将文件的保存格式改成utf-8。