编程练习2——03

来源:互联网 发布:js eval函数 json 编辑:程序博客网 时间:2024/05/17 00:49
3.   字符串数组的冒泡排序,从小到大
   例如 hello good suqian nice world 

   输出 good hello nice suqian world


分析:使用strcmp比较字符串,最后用冒泡排序排序。


下面是代码实现:


/*************************************
   字符串数组的冒泡排序,从小到大
   例如 hello good suqian nice world 
   输出 good hello nice suqian world
*************************************/


#include <stdio.h>
#include <stdlib.h>


#define LEN 5


int mystrlen(char *str)  //计算字符串长度
{
if (str == NULL)
{
return -1;
}


int length = 0;


while (*str++ != '\0')
{
length++;
}
return length;
}


int mystrcmp(const char *str1, const char *str2)  //比较字符串大小,大于返回正数,小于负数,相等为0
{
char *p1 = (char *)str1;
char *p2 = (char *)str2;
if (str1 == NULL || str2 == NULL)
{
return -1;
}

#if 0
if (mystrlen(p1) != mystrlen(p2)) //如果长度不等,那么长的大 
{
return (mystrlen(p1) > mystrlen(p2) ? 1 : -1);
}
#endif


while (*str1 == *str2)
{
if (*str1 == '\0')
{
return 0;  //相等返回0
}
str1++;
str2++;
}


return (*str1 - *str2);
}


void Sort(char **str, const int len)  //排序字符串数组
{
int i = 0;
int j = 0;
char *temp = NULL;
temp = (char *)malloc(10 * sizeof (char));
char *p = temp;


for (i = 0; i < len - 1; i++) //冒泡排序
{
for (j = 0; j < len - i - 1; j++)
{
if (mystrcmp(str[j], str[j + 1]) > 0) //比较字符串大小按照ASCII比较
{
p = str[j];
str[j] = str[j + 1];
str[j + 1] = p;
}
}
}


free(temp);
temp = NULL;
}


int main()
{
int i = 0;
char *str[LEN] = {"hello", "suqian", "world", "nice", "good"}; //定义指针数组


Sort(str, LEN); //冒泡排序


for (i = 0; i < LEN; i++)
{
printf ("%s\n", str[i]); //输出结果
}




return 0;
}