C++问题 经济求助

来源:百度知道 编辑:UC知道 时间:2024/05/15 18:06:58
对于给定的字符串,去除其中的全部元音字符(a,e,i,o,u,A,E,I,O,U)。
Input:
每行一个字符串,它的长度小于等于80。
Output:
去除给定字符串中的所有元音字符后输出。
Sample Input:
b c d e f
Today is sunny.
Sample Output:
b c d f
Tdy s snny.

#include<iostream>
using namespace std;
int main()
{
char s[80];
gets(s);
int i;
for(i=0;i<80;++i)
{
if(s[i]!='a'&&s[i]!='e'&&s[i]!='i'&&s[i]!='o'&&s[i]!='u'&&s[i]!='A'&&s[i]!='E'&&s[i]!='I'&&s[i]!='O'&&s[i]!='U')
cout<<s[i];
}
}

怎么输出乱码?

是因为你的条件判断有问题,i<80,但是你能够保证你输入的正好是80个字符吗?显然不能,当字符不足时,在编译器给s分配空间时,其中是有字符的,也就是你显示的乱码。你可以更改一下条件判断:
for(i=0;s[i]!='\0'&&i<80;++i) 这样就不会出现乱码了。
如果像其他人说的改为i<strlen(s),当输入的字符个数大于80时,就会出错。

把for退出的条件改下,
for(i=0;i<strlen(s);i++)

注意加上头文件<string.h>

char s[80];
改成
char s[80] = {};
就行了。
测试通过的。
:)
简单吧,难者不会,会者不难。

#include<iostream>
using namespace std;
int main()
{
char s[80];
memset(s,0,80);
gets(s);
int i;
for(i=0;i<80;++i)
{
if(s[i]!='a'&&s[i]!='e'&&s[i]!='i'&&s[i]!='o'&&s[i]!='u'&&s[i]!='A'&&s[i]!='E'&&s[i]!='I'&&s[i]!='O'&&s[i]!='U')
cout<<s[i];
if(s[i]=='0'){cout<<endl;break;}
}
}

这样会不会更好一些
#include<iostream>
using namespace std;

int main()
{
char s[80];