字符串排序……程序崩溃了!

来源:百度知道 编辑:UC知道 时间:2024/05/23 12:42:06
#include<iostream>
#include<string>
using namespace std;
void fun(char **str)
{
char xx[20];
for(int i=0;i<5-1;i++)
for(int j=i+1;j<5;j++)
if(strcmp(str[i],str[j])>0)
{
strcpy(xx,str[i]);
strcpy(str[i],str[j]);
strcpy(str[j],xx);
}
}
int main()
{
char *str[]={"2006-12-14",
"2008-01-05",
"2008-07-12",
"2007-11-12",
"1999-04-12"};
fun(str);
for(int i=0;i<5;i++)
cout<<str[i]<<endl;
return 0;
}问题出在哪儿?谢谢!!

问题出在:变量str是一个字符串常量数组,即数组str的每一个元素所指向的内容为字符串常量,不允许修改。允许修改的是数组str的每一个元素,即指针值,如str[0]、str[1]...等。建议楼主在排序函数fun()中,将三个strcpy操作换成字符指针交换操作,比如:
char *xx; // 而不是char xx[20];
if(strcmp(str[i],str[j])>0)
{
xx = str[i];
str[i] = str[j];
str[j] = xx;
}

我用的是string定义的一个字符串数组,就可以很轻易的进行比较了。代码如下你参考一下。
#include "iostream"
#include "string"
using namespace std;
void main()
{
string a[6];
int i,j;
for(i=0;i<5;i++)
cin>>a[i];
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)
if(a[j]>a[j+1])
{
a[5]=a[j];
a[j]=a[j+1];
a[j+1]=a[5];
}
for(i=0;i<5;i++)
cout<<a[i]<<endl;
}功能是一样的。

不防看看我的答案:
#include<iostream>
#include<string>
using namespace std;
void fun(char **str)
{
char *xx=new char[10];
for(int i=0;i<5-1;i++)
for(int j=