C指针数组 strcmp使用问题
#include <stdio.h>#include <string.h>
void main()
{
void sort(char *name[], int n);
void print(char *name[], int n);
char *name[] = {"Fishc.com", "www.fishc.com", "home.fishc.com", "Fishc.com/dz"};
int n = 4;
sort(name, n);
print(name, n);
}
void sort(char *name[], 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(name, name) > 0 ) //这里的if语句是什么意思啊?
{ //它里面判断的是name) > 0 ?? 不用想就知道是大于0的
k = j; //那这个K=J 是干什么用的 /
} // 想好久都没想通,求解答,
if( k != i ) //这里i=0的时候 K貌似也是等于0的 怎么可能== 嘛,
{
temp = name;
name = name;
name = temp;
}
}
}
}
void print(char *name[], int n)
{
int i;
for( i=0; i < n; i++ )
{
printf("%s\n", name);//这里是是用数组索引指针值的,我这句话说的对吗?
}
}
直接贴代码。 1.函数简介
原型:extern int strcmp(const char *s1,const char * s2);
所在头文件:string.h
功能:比较字符串s1和s2。
一般形式:strcmp(字符串1,字符串2)
说明:
当s1<s2时,返回为负数 注意不是-1
当s1==s2时,返回值= 0
当s1>s2时,返回正数 注意不是1
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:
"A"<"B" "a">"A" "computer">"compare"
特别注意:strcmp(const char *s1,const char * s2)这里面只能比较字符串,不能比较数字等其他形式的参数。
2. k = j; //那这个K=J 是干什么用的 /
这个应该是交换数组元素下标,比如,s1>s2就交换这两个元素的位置
3.if( k != i )判断是不是同一个数组元素 如果上边的if执行了,那此时k=j 楼上解释的挺详细了。我帮你推演一下啦
假设你的字符串数组是
char *name[] = {"c", "a", "b"};
第一次循环
i=0,k=0,j=1 name="c" name="a"
那么strcmp("c","a")>0于是k=1
if哪里k!=i 于是交换位置,现在name[]变成:"a","c","b"
第二次循环
i=1,k=1,j=2 name="c" name="b"
那么strcmp("c","b")>0于是k=2
if哪里k!=i 于是交换位置,现在name[]变成:"a","b","c"
第三次循环:
i=2 等于n-1 退出循环
搞定排序。
页:
[1]