指针数组,与字符串按字符大小排序有关问题
指针数组,与字符串按字符大小排序问题。
结果:
BASIC
C++
COBOL
FORTRAN
PASCAL
Press any key to continue . . .
这个程序我不明白。在函数中,不能企图通过改变形参指针变量的值而使实参指针变量的值改变。
strcmp是对比字符串大、小、等于。但不是对比字符串前边的字符大小吧?
请各位解释一下这个程序。写些注释出来,我看不明白,为什么可以这样做法?用strcmp?
------解决方案--------------------
strcmp是这样比较的,两个字符串,从第一个字符开始比,如果相同,继续向下比,如果不同,看这两个字符的ASCII码,如果第一个字符串的比较大,则返回1,相同返回0,否则返回-1.
例如: BASIC和C++比完首字母就不会继续比了.
------解决方案--------------------
------解决方案--------------------
Sort()函数传入的实际上是数组pstr[]的首地址,所以pstr[i]在函数内外都是指的相同的内存,所以交换之后,函数Sort()外的值也改变了。
strcmp()解释同上
------解决方案--------------------
- C/C++ code
void Sort(char *pstr[], int n)
{
char *temp;
int i, j, k;
for(i = 0; i < n - 1; i++)
{
k = i;
for(j = i + 1; j < n; j++)
{
if(strcmp(pstr[k], pstr[j]) > 0)
k = j;
if(k != i)
{
temp = pstr[i];
pstr[i] = pstr[k];
pstr[k] = temp;
}
}
}
}
void Output(char *pstr[], int n)
{
for(int i = 0; i < n; i++)
cout < <pstr[i] < <endl;
}
int main(int argc, char *argv[])
{
char *pstr[5] = {"BASIC", "FORTRAN", "C++", "PASCAL", "COBOL"};
Sort(pstr, 5);
Output(pstr, 5);
return 0;
}
结果:
BASIC
C++
COBOL
FORTRAN
PASCAL
Press any key to continue . . .
这个程序我不明白。在函数中,不能企图通过改变形参指针变量的值而使实参指针变量的值改变。
strcmp是对比字符串大、小、等于。但不是对比字符串前边的字符大小吧?
请各位解释一下这个程序。写些注释出来,我看不明白,为什么可以这样做法?用strcmp?
------解决方案--------------------
strcmp是这样比较的,两个字符串,从第一个字符开始比,如果相同,继续向下比,如果不同,看这两个字符的ASCII码,如果第一个字符串的比较大,则返回1,相同返回0,否则返回-1.
例如: BASIC和C++比完首字母就不会继续比了.
------解决方案--------------------
------解决方案--------------------
Sort()函数传入的实际上是数组pstr[]的首地址,所以pstr[i]在函数内外都是指的相同的内存,所以交换之后,函数Sort()外的值也改变了。
strcmp()解释同上
------解决方案--------------------
- C/C++ code
void Sort(char *pstr[], int n) { char *temp;//定义一个临时的指向字符串的指针 int i, j, k; //选择排序 for(i = 0; i < n - 1; i++) { k = i; for(j = i + 1; j < n; j++) { if(strcmp(pstr[k], pstr[j]) > 0) //pstr[k] 和 pstr[j] 都是地址,strcmp 比较它们指向的字符串的值 k = j; if(k != i) { //这里交换的是地址,也就是改变指针的指向,字符串本身没有变。 temp = pstr[i]; pstr[i] = pstr[k]; pstr[k] = temp; } } } } void Output(char *pstr[], int n) { for(int i = 0; i < n; i++) cout<<pstr[i]<<endl; } int main(int argc, char *argv[]) { char *pstr[5] = {"BASIC", "FORTRAN", "C++", "PASCAL", "COBOL"}; //定义指向字符串的指针数组 Sort(pstr, 5); //传人指针数组的首地址 Output(pstr, 5); return 0; }