输入三个字符串,按由小到大的顺序输出

#include<stdio.h>
#include<string.h>

void init(char*a,char *b,char *c)
{
	gets_s(a,20);
	gets_s(b,20);
	gets_s(c,20);

}

void swap(char* a, char* b)
{
	char tmp[20] = {0};
	strcpy_s(tmp,20,a);
	strcpy_s(a,20,b);
	strcpy_s(b,20,tmp);
}

void sort(char *a,char *b,char *c)
{
	if (strcmp(a, b) > 0)
	{
		swap(a, b);
	}
	if (strcmp(a, c) > 0)
	{
		swap(a, c);
	}
	if (strcmp(b, c) > 0)
	{
		swap(b, c);
	}

}

void show(char *a,char *b,char *c)
{
	printf("%s", a);
	printf("%s", b);
	printf("%s", c);
}
int main()
{
	char a[20] = {0};
	char b[20] = {0};
	char c[20] = {0};
	init(a,b,c);
	sort(a, b, c);
	show(a, b, c);
}

我遇到的问题:

1.指针初始化

我们要尽量避免野指针的出现,注意要初始化指针。

2.swap函数的使用

当我们需要交换两个字符串时,要把一个字符串里的字母完全复制到另一个字符串。

我们的形参是两个char类型的指针,我们要做的就是将这两个字符串进行交换。

我之前写的是

#include<stdio.h>
void Swap(char* a, char *b)
{
	char tmp[] ="0";
	*tmp = *a;
	*a = *b;
	*b = *tmp;
}
int main()
{
	char a[] = "ab";
	char b[] = "ba";
	printf("%s %s\n", a, b);
	Swap(a, b);
	printf("%s %s\n", a, b);
}

但是这样只能改变首地址的值 ,我们需要用strcpy函数进行转移值。

3.#include<string.h>中函数的使用

①strcpy_s

这个函数的作用是将一个字符串复制到另一个字符串

strcpy_s(dst, sizeof(dst)/sizeof(dst[0]), src);

将src里的字符串复制到dst里,中间这个数据的大小就是目标地址的大小,这个参数的作用是保证足够大的缓冲区尺寸。函数拷贝以‘\0’结尾。

②strcmp

int strcmp(const char *str1, const char *str2)

输入的参数必须是字符串。

  • 如果返回值小于 0,则表示 str1 小于 str2。
  • 如果返回值大于 0,则表示 str1 大于 str2。
  • 如果返回值等于 0,则表示 str1 等于 str2。

4.gets_s的使用

是gets的安全版本,为了避免缓冲区溢出,在gets_s中在定义一个参数。

gets_s(char *p,int n);

//n表示其最多读取的数量,一般为数组大小,即从键盘读入大小为n的一个字符串,它在输入的是时候,不以空格为结束标志,而以回车符为结束标志。

    原文作者:分号;
    原文地址: https://blog.csdn.net/weixin_45832564/article/details/121969142
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞