回 帖 发 新 帖 刷新版面

主题:数组指针查错(小段代码)

我想通过数组指针(虽然其他的方法也可以,但是我就是要求用这种方法)实现将字符串按字母从小到大的顺序输出。为什么添加#define<string>以后,用name[i]>name[j]作为比较条件(位置已做标记)时,字符串是按逆序输出,而不按从小到大的顺序输出。用这种方法错在哪里,而用strcmp函数对在哪里。求解,谢谢!

#include<iostream>
#include<string>
using namespace std;
int main()
{
void sort(char *name[],int n);
void print(char *name[],int n);
char *name[]={"BASIC","FORTRAN","C++","PASCAL","COBOL"};
int n=5;
sort(name,n);
print(name,n);
cout<<endl;
return 0;
}
void sort(char *name[],int n)
{
int i,j;
char *temp;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(strcmp(name[i],name[j])>0) //添加#define<string>以后,用name[i]>name[j]
                              //作为比较条件不行(原因不知)
{
temp=name[i];
name[i]=name[j];
name[j]=temp;
}
}
void print(char *name[],int n)
{
int i;
for(i=0;i<n;i++)
cout<<name[i]<<endl;
}

回复列表 (共3个回复)

沙发

因为name[i]与name[j]代表的都是一个字符串,字符串的比较是一定要用专用的字符串比较函数的,若直接用传统的大小符号比较,那将永远是比较符号左边的字符串大,除非是两个字符串完全相等,才相等。[em1]

板凳

[quote]因为name[i]与name[j]代表的都是一个字符串,字符串的比较是一定要用专用的字符串比较函数的,若直接用传统的大小符号比较,那将永远是比较符号左边的字符串大,除非是两个字符串完全相等,才相等。[em1][/quote]

3 楼


我知道问题出在哪里了。只是写的时候没有注意。我本来是想定义字符串类的,谢谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册