strcmp函数[比较的是两字符串的ASCAII值]
1)字符串1=字符串2,返回0
(2)字符串1 > 字符串2,返回一个正整数
(3)字符串1 < 字符串2,返回一个负整数。
冒泡法的应用:
void printMyarray11(char**myarray,int num)
{
int i = 0; int j = 0;
//打印
for (i = 0; i < num; i++)
{
printf("排序前:%s\n", myarray[i]);
}
}
void mypaixu(char**mystr,int num)
{
char *tmp = NULL;
int i = 0; int j = 0;
for (i = 0; i < num; i++)
{
for (j = i; j < num; j++)
{
if (strcmp(mystr[i], mystr[j]) > 0)
//1)字符串1=字符串2,返回0
//(2)字符串1 > 字符串2,返回一个正整数
//(3)字符串1 < 字符串2,返回一个负整数。
{
tmp = mystr[i];//注意 交换的是指针的值
mystr[i] = mystr[j];
mystr[j] = tmp;
}
}
}
return;
}
void main()
{
int num = 0;
char*mysrtr[] = { "aaaa","ccc","aaa" };
num = sizeof(mysrtr) / sizeof(mysrtr[0]);
printf("排序前:\n");
printMyarray11(mysrtr,num);
mypaixu(mysrtr,num);
printf("排序后:\n");
printMyarray11(mysrtr,num);
system("pause");
return;
}
第二种情况 互换的是内存块
特点:void myoutput(char myArray[10][30],int num)//此处调用(char**mystr,int num)不可行
同理 void mypaixu2(char myArray[10][30],int num)
易错点:
//int num = 0;
//num = sizeof(myArray) / sizeof(myArray[0]);这种写法错误 得出的是[10][30]
(10行30列300个字节)/(sizeof(myArray[0])这时表示的是第一行的列30)所以结果是10;并非是我们想要的4。
void myoutput(char myArray[10][30],int num)//此处调用(char**mystr,int num)不可行
{
for (int i = 0; i < num; i++)
{
printf("%s\n", myArray[i]);
}
return;
}
void mypaixu2(char myArray[10][30],int num)
{
char tmp[30];
for (int i = 0; i < num; i++)
{
for (int j = i; j < num; j++)
{
if (strcmp(myArray[i], myArray[j]) > 0)
{
strcpy(tmp, myArray[i]);//交换的是内存块
strcpy(myArray[i], myArray[j]);
strcpy(myArray[j], tmp);
}
}
}
return;
}
void main()
{ int num=4;
char buf[30];
char myArray[10][30] = { "1111","ddddd","aaaaa","ccccc" };
char tmp[30];
//int num = 0;
//num = sizeof(myArray) / sizeof(myArray[0]);这种写法错误 得出的是[10][30]
(10行30列300个字节)/(sizeof(myArray[0])这时表示的是第一行的列30)所以结果是10;并非是我们想要的4。
printf("排序前:\n");
myoutput(myArray,num);
mypaixu2(myArray,num);
printf("排序后:\n");
myoutput(myArray, num);
system("pause");
return;
}