您的位置:首页 > 其它

存放字符串的指针数组相关应用

2017-11-13 22:57 239 查看

字符指针数组的原地排序

#include "stdafx.h"
#include <string.h>

//冒泡法排序
void popSort(int* p, int n);

int _tmain(int argc, _TCHAR* argv[])
{

//char* array[10];//指针数组 放地址的(数组中的各个元素都是字符指针)

char* name[] = { "IBM", "Apple", "Oracle", "MicroSoft",
"Google", "Facebook", "SpaceX", "Intel" };

for (int i = 0; i < sizeof(name) / sizeof(name[0]); i++)
printf("%s\n", name[i]);

//int array[10] = { 8, 88, 7, 567, 768, 5, 78, 45, 77, 122 };

//popSort(array, 10);

//for (int i = 0; i < 10; i++)
//{
//	printf("%d\n", array[i]);
//}

printf("========================================\n");
//原地排序
int size = sizeof(name) / sizeof(name[0]);
for (int i = 0; i<size - 1; i++)
{
for (int j = 0; j<size - 1 - i; j++)
{
if (strcmp(name[j], name[j + 1])>0)
//相当与比较这俩地址下的字符串的大小
{
//调整的只是 数组中 存储字符串地址元素的位置
name[j] = (char*)((int)name[j] ^ (int)name[j + 1]);
name[j+1] = (char*)((int)name[j] ^ (int)name[j + 1]);
name[j] = (char*)((int)name[j] ^ (int)name[j + 1]);
}//异或运算(带^的运算) 必须是整型int 所以第一次强转
}    //name为字符指针型数组,需要char*进行第二次强转
}

for (int i = 0; i<sizeof(name) / sizeof(name[0]); i++)
printf("%s\n", name[i]);

return 0;
}

void popSort(int* p, int n) //实现
{
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - 1 - i; j++)
{
if (p[j] > p[j + 1])
{
p[j] = p[j] ^ p[j + 1];
p[j + 1] = p[j] ^ p[j + 1];
p[j] = p[j] ^ p[j + 1];
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐