题目:
输入3个字符串,要求按由小到大的顺序输出。
代码实现:
//输入3个字符串,由小到大输出
//使用指针处理(不使用strcmp函数)
#define _CRT_SECURE_NO_WARNINGS 1
#define SIZE 3
#include <stdio.h>
#include <assert.h>
//第1参数大-----return -1
//第2个参数大---return 1
//一样大--------return 0
int My_strcmp(char(*p1)[20], char(*p2)[20], int cols)
{
assert(p1);
assert(p2);
int i = 0;
for (i = 0; i < cols; i++)
{
//第一个大 --- -1
if (*(*p1+i) > *(*p2+i))
{
return -1;
}
//第2个大 --- 1
else if (*(*p1 + i) < *(*p2 + i))
{
return 1;
}
}
return 0;
}
//对2个字符串进行交换
void Swap(char(*p1)[20], char(*p2)[20])
{
assert(p1);
assert(p2);
int i = 0;
char tem = 0;
for (i = 0; *(*p1+i) != '\0' || *(*p2 + i) != '\0'; i++)
{
tem = *(*p1 + i);
*(*p1 + i) = *(*p2 + i);
*(*p2 + i) = tem;
}
}
int main()
{
char arr[SIZE][20] = {0};
int i = 0;
int ret = 0;
//输入
for (i = 0; i < SIZE; i++)
{
scanf("%s", arr[i]);
}
//将最大字符串排到最后
for (i = 0; i < 2; i++)
{
ret = My_strcmp(arr+i, arr + i + 1, 20);
if (0 > ret)
{
Swap(arr+i, arr + i + 1);
}
}
//将最小字符串排到最前
ret = My_strcmp(arr, arr + 1, 20);
if (0 > ret)
{
Swap(arr, arr + 1);
}
//输出
for (i = 0; i < SIZE; i++)
{
printf("%s ", arr[i]);
}
return 0;
}