排序

c++数组的逆序以及汉字的输出操作

首先是数组的逆序操作.
  • 获取数组的首地址跟末地址
  • 利用中间值依次交换
  • 最后输出逆序以后的数组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void nixu(int str[],int len)//数组的逆序
{

int *ip = &str[0];
int *ip1 = &str[len-1];
while (ip<ip1)
{
int temp = *ip;
*ip = *ip1;
*ip1 = temp;

ip++;
ip1--;
}
for (int i = 0; i < len; i++)
{
printf("%d\n", str[i]);
}
}
求一个数组中第二大的数。
  • 首先定义两个指针指向首地址跟下一个地址
  • 假设max是最大值,s_max是第二大值
  • 第一个判断得到的是否是最大值。
  • 第二个判断第二大值是否仅次于最大值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int mbxs(int *str,int lens)
{
//定义两个指针
int* max = str;
int *s_max = ++str;
for (int i = 0; i < lens - 1; i++)
{
if (*max < *(str + i))
{
int ip = *s_max;
*s_max = *max;
*max = *(str + i);
*(str + i) = ip;
}
if (*max > *(str + i) && *s_max < *(str + i))
{
int ipp=*s_max;
*s_max = *(str + i);
*(str+i)=ipp;
}
}
return *s_max;
}
对汉字进行输出

因为一个汉字占两个字节或者更多的字节数,所以输出一个字一定是几个字节拼凑得出一个字。

1
2
3
4
5
6
7
8
9
10
void china_string(char *str)
{
char *ip = str;
while (*ip)
{
printf("%c%c\n",*ip,*(ip+1) );
ip +=2;
}
printf("%s", str);
}
对汉字字符串进行逆序操作

整体思路跟前面的不变,只是指针移动的字节数是一个汉字占用的字节数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void china_string_server(char str[])
{
short *ip = &str[0];
short *ip1 = &str[strlen(str)-2];
while (ip<ip1)
{
short temp = *ip;
*ip = *ip1;
*ip1 = temp;

ip++;
ip1--;
}
printf("%s\n", str);

}
求数组中最大值。
1
2
3
4
5
6
7
8
9
10
int maxs(int *a,int lens)
{
int max = *a;
for (int i = 0; i < lens; i++)
{
if (max < *(a+i))
max = *(a+i);
}
return max;
}

好多东西零零散散的都快忘干净了,写的不是很好,有好想法的小伙伴多提意见。

版权声明:本文为博主原创,如若转载请标明出处https://dword.top/排序.html

-------------end-------------
0%