拷贝法和指针法对汉字或字符串排序
方法一:
拷贝法:把3个字符串拷贝交换顺序
#include<stdio.h>
#include<string.h>
void sort(char p[][15], int len)
{
char t[15];
for (int i = 0; i < len-1 ;++i) //冒泡排序,进行len-1次循环,实现len-1趟比较
{
for (int j = 0; j < len-1-i; ++j)//在每一趟中进行len-1-i次比较
{
if (strcmp(p[j], p[j + 1])>0)
{
strcpy (t,p[j]); //把p[j]地址中的字符串复制到t[16]中
strcpy(p[j], p[j+1]);
strcpy(p[j+1], t);
}
}
}
}
void showstr(char str[][15], int len)
{
for (int i = 0; i < len; i++)
{
puts(str[i]);
}
}
int main()
{
char str[3][15] =
{ "敏儿",
"猪猪",
"然然"
};
sort(str, 3);
showstr(str, 3);
return 0;
}
方法二:
指针法:定义指针数组存储该3个字符串的首地址,将该地址中的元素比较大小后,交换首地址中的字符串,更为简便。
#include<stdio.h>
#include<string.h>
void sort(char* pstr[], int len)
{
char* t;
for (int i = 0; i < len - 1; ++i) //冒泡排序,进行len-1次循环,实现len-1趟比较
{
for (int j = 0; j < len - 1 - i; ++j) //在每一趟中进行len-1-i次比较
{
if (strcmp(pstr[j], pstr[j + 1])>0)
{
t = pstr[j];
pstr[j] = pstr[j + 1];
pstr[j + 1] = t;
}
}
}
}
void showstr(char* pstr[], int len)
{
for (int i = 0; i < len; ++i)
{
puts(pstr[i]);
}
}
int main()
{
char str[3][15] =
{ "敏儿",
"猪猪",
"然然"
};
char* pstr[3];
for (int i = 0; i < 3; ++i)
{
pstr[i]=str[i]; //存入str中3个字符串的首地址char* pstr[3]={str[0],str[1],str[2]}
}
sort(pstr, 3);
showstr(pstr, 3);
return 0;
}