Một lý do khác strcmp()
trả về mã nó làm là để nó có thể được sử dụng trực tiếp trong hàm thư viện chuẩn qsort()
, cho phép bạn sắp xếp một mảng của chuỗi:
#include <string.h> // for strcmp()
#include <stdlib.h> // for qsort()
#include <stdio.h>
int sort_func(const void *a, const void *b)
{
const char **s1 = (const char **)a;
const char **s2 = (const char **)b;
return strcmp(*s1, *s2);
}
int main(int argc, char **argv)
{
int i;
printf("Pre-sort:\n");
for(i = 1; i < argc; i++)
printf("Argument %i is %s\n", i, argv[i]);
qsort((void *)(argv + 1), argc - 1, sizeof(char *), sort_func);
printf("Post-sort:\n");
for(i = 1; i < argc; i++)
printf("Argument %i is %s\n", i, argv[i]);
return 0;
}
chương trình mẫu nhỏ này phân loại đối số của nó ASCIIbetically (những gì một số sẽ gọi lexically). Lookie:
$ gcc -o sort sort.c
$ ./sort hi there little fella
Pre-sort:
Argument 1 is hi
Argument 2 is there
Argument 3 is little
Argument 4 is fella
Post-sort:
Argument 1 is fella
Argument 2 is hi
Argument 3 is little
Argument 4 is there
Nếu strcmp()
trở 1
(true) cho chuỗi bình đẳng và 0
(false) cho những người thân inequal, nó sẽ không thể sử dụng nó để đạt được mức độ hoặc hướng của bất bình đẳng (ví dụ như thế nào khác nhau, và cái nào lớn hơn) giữa hai chuỗi, do đó làm cho nó không thể sử dụng nó như một hàm phân loại.
Tôi không biết bạn quen thuộc thế nào với C. Mã trên sử dụng một số khái niệm khó hiểu nhất của C - số học con trỏ, con trỏ recasting và con trỏ hàm - vì vậy nếu bạn không hiểu một số mã đó, don Đừng lo, bạn sẽ đến đó đúng giờ. Cho đến lúc đó, bạn sẽ có rất nhiều câu hỏi thú vị để hỏi về StackOverflow. ;)
Nguồn
2009-09-02 04:58:48
Thời gian! = Tiền trực tiếp - trước tiên bạn phải sử dụng chuyển đổi đơn vị. –
kudo cho bất cứ ai làm lại câu hỏi spam này thành một thứ có thể hữu ích cho người mới. Tôi vẫn không sẵn sàng bỏ phiếu cho nó mặc dù, vì sợ rằng nó khuyến khích OP để đăng tripe như vậy một lần nữa. – rmeador
@remeador: Cảm ơn bạn, nhưng đừng xúc phạm OP. – GEOCHET