题目:

 输入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;
}

运行结果:

谭浩强 第5版 第8章 第2题_字符串