#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的一个字符串,它在输入的是时候,不以空格为结束标志,而以回车符为结束标志。