c++问题啊啊啊啊

来源:百度知道 编辑:UC知道 时间:2024/07/07 00:43:16
#include<iostream>
#include<string>
using namespace std;
int main()
{
string f[100],s;
int n,a,i;
cin>>n;
for (a=0;a<n;a++)
cin>>f[a];
for (i=0;i<n;i++)
for (a=0;a<n;a++)
if (f[a]>f[a+1])
{
s=f[a];
f[a]=f[a+1];
f[a+1]=s;
}
for (i=0;i<=n;i++)
cout<<f[i]<<endl;
return 0;
}
为什么这个字符串排序的排序以后f[0]里面存储的为“回车”啊?

#include<iostream>
#include<string>
using namespace std;
int main()
{
string f[1000],s;
int n,a,i;
cin>>n;
for (a=0;a<n;a++)
cin>>f[a];
for (i=0;i<n;i++)
for (a=0;a<n-1;a++)
if (f[a]>f[a+1])
{
s=f[a];
f[a]=f[a+1];
f[a+1]=s;
}
for (i=0;i<n;i++)
cout<<f[i]<<endl;
return 0;
}

这是我的帮你该后的代码
1楼 的你那样子写能通过编译吗!晕
2楼的说的没有错啦,但是你这样子输出来后,最后一个元素又会是空格啦!

cin>>n;
for (a=0;a<n;a++)
cin>>f[a];
关键在于这几句:运行的时候你输入值后按下回车键(Enter),然后数字存入n,还有你按下回车键后Enter的键值存在于内存的输入流。那么接下来的for循环的第一个输入cin>>f[0];就会把输入流存在的第一个输入值存储。这样就会出现你说的情况:f[0]里面存储的为“回车”。建议在每个cin>>n;流后面加上endl,就是cin>>n>>endl;

应该是a+1当a是n-1的时候,a+1就超了,把不属于f数组的内存数据弄进来了。。你应该写成for (a=0;(a+1)<n;a++)

是你的排序那错了,边界值错了。还有最后输出时的i<=n???好像直接用i < n就好了吧。下面是我改过的