C++关于字符串数组的字典排序。。求高手指点错误

兄弟们,打扰一下,C++关于字符串数组的字典排序。。求高手指点错误?

题目要求对n个字符串按字典序排序,用二维数组做,程序如下:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n,i;
cout<<"请输入要排序的字符串组数:"<<endl;
cin>>n;
char **string=new char *[n];
for(i=0;i<n;i++)
string[i]=new char [100];
cout<<"请依次输入要排序的字符串"<<endl;
for(i=0;i<n;i++)
{
cout<<"第"<<i+1<<"串:";
cin>>string[i];
}
for(i=0;i<n;i++)
if(strcmp(string[i+1],string[i])<0)
{
char temp=string[i+1];
string[i+1]=string[i];
string[i]=temp;
}
for(i=0;i<n;i++)
cout<<string[i]<<endl;;
for(i=0;i<n;i++)
delete []string[i];
delete []string;
return 0;
}
运行之后报错说无法从“char”转换为“char *,是中间交换那边temp出的问题,先解释一下什么意思,还有,怎么解决?
最新回答
绿梦与我

2024-12-02 13:16:02

/***
char temp=string[i+1];
string[i+1]=string[i];
string[i]=temp;
***/
一、string[i]是个字符串,char temp中,temp是一个字符,所以会出错!
二、字符串交换不能用=来赋值。换成strcpy吧,改动如下:
for(i=0;i<n-1;i++) //这里n改为n-1
{
char temp[100];
strcpy( temp , string[i+1]);
strcpy( string[i+1] , string[i] );
strcpy( string[i] , temp ); //刚才这里写错了
}
三、你的方法只能比较相邻串的大小,并没有实现全部串的大小排列,需要再改进一下。
捂住眼睛捂不住人心

2024-12-02 03:16:00

哦,是这个问题,首先呢,你定义的string是一个指向字符串指针数组,而每一个字符串的最大范围都是一百字节,所以string[i]表示的是第i个字符串的首地址,也就是说,其存储的是一个指针,该指针指向一个字符串,所以,当你进行赋值的时候,才会出现报错无法从char 转换为char *
将temp改成一个字符串指针就可以了。
追问
你好!你说的我试过,char* temp对吧。。确实可以运行,但不能出结果,而且有BUG,会直接停止工作。。。。。。。
追答
嗯 用楼下的办法吧。