字符串数组的排序和打印:
第一种模型:交换的是指针指向
1、
char *myArray[] = {"aaaaaaa","ccccccc","bbbbbbbb","111111111"}
myArray先与[]结合,所以myArray是一个数组,然后再与*结合,说明数组里的元素是指针类型,然后再与char结合,说明指针所指向的内容是char型的。
myArray是一个指针形成的数组的首地址,所以当把myArray作为实参输入到函数时,其对应的形参应该是一个二级指针,即指向指针的指针。
2、
strcmp(s1,s2) 当s1<s2时,返回为负数;当s1==s2时,返回值= 0;当s1>s2时,返回正数
代码:
#include "stdafx.h"
#include<iostream>
using namespace std;
//打印
void PrintArray(char **myarray,int num)
{
int i = 0;
for (i = 0; i < num ; i++)
{
printf("%s \n",myarray[i]);
}
}
//排序
int rearrange(char **myarray,int num)
{
int ret = 0;
int i = 0,j = 0;
char *tmp = NULL;
if(myarray == NULL)
{
ret = -1;
printf("the fun rearrange err: %d (myarray == NULL) ",ret);
return ret;
}
for(i=0;i<num;i++)
{
for(j=i;j<num;j++)
{
if(strcmp(myarray[i],myarray[j]) > 0)
{
tmp = myarray[i]; //交换的是指针的值
myarray[i] = myarray[j];
myarray[j] = tmp;
}
}
}
return ret;
}
int _tmain(int argc, _TCHAR* argv[])
{
char *myArray2[] = {"2222222","ccccccc","bbbbbbbb","111111111"};
int num2 = 0;
num2 = sizeof(myArray2)/sizeof(myArray2[0]);
PrintArray(myArray2,num2);
cout<<"after:"<<endl;
rearrange(myArray2,num2);
PrintArray(myArray2,num2);
return 0;
}
第二种:交换的是内存块
#include "stdafx.h"
#include<iostream>
using namespace std;
void PrintArray(char myarray[10][30],int num)
{
int i = 0;
for (i=0;i<num;i++)
{
printf("%s \n",myarray[i]);
}
}
void sortArray(char myarray[10][30],int num)
{
int i = 0,j = 0;
char tmp[30] = {};
for(i=0;i<num;i++)
{
for(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);
}
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int i = 0,j = 0;
int num = 4;
char myArray[10][30] = {"22222","bbbbb","aaaaa","00000"};
PrintArray(myArray,num);
sortArray(myArray,num);
cout<<"after:"<<endl;
PrintArray(myArray,num);
return 0;
}
第三种:自己打造内存空间
#include "stdafx.h"
#include<iostream>
using namespace std;
void PrintArray(char**p,int num)
{
int i = 0;
for(i = 0;i < num;i++)
{
printf("%s \n",p[i]);
}
}
//改变指针指向
void sortArray01(char**p,int num)
{
int i = 0,j = 0;
char *tmp = NULL;
for(i = 0;i<num;i++)
{
for(j=i;j<num;j++)
{
if(strcmp(p[i],p[j])<0)
{
tmp = p[i];
p[i] = p[j];
p[j] = tmp;
}
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char **p1 = NULL;
int num = 5;
int i = 0;
//创建内存
p1 = (char **)malloc(sizeof(char *)*100);
for (i = 0;i < num;i++)
{
p1[i] = (char*)malloc(sizeof(char)*100);//char buf[100];
sprintf(p1[i],"%d%d%d",i+1,i+1,i+1);
}
PrintArray(p1,num);
sortArray01(p1,num);
cout<<"after"<<endl;
PrintArray(p1,num);
//释放内存
for(i = 0;i<num;i++)
{
if(p1[i] != NULL)
{
free(p1[i]);
p1[i] = NULL;
}
}
if(p1 != NULL)
{
free(p1);
p1 = NULL;
}
return 0;
}