题目描述
输入3个字符串,按从小到大的顺序输出。要求使用指针的方法进行处理。
输入
3行,每行一个用字符串。保证每个字符串的长度不超过20。
输出
按从小到大的顺序输出这3个字符串,每个字符串一行。
请注意行尾输出换行。
样例输入
China CLOCK deal
样例输出
CLOCK China deal
#include <stdio.h>
#include<string.h>
void sort(char *a ,char *b){
//a>b
int result=strcmp(a,b);
if(result<0){
char temp[20]={};
strcpy(temp,a);//用的是a,不是*a?字符串指针和int指针区别?
strcpy(a,b);
strcpy(b,temp);
}
}
int main() {
char str1[50]={};
char str2[50]={};
char str3[50]={};
gets(str1);
gets(str2);
gets(str3);
//str1>str2>str3
//注意函数调用的顺序
sort(str1,str2);
sort(str1,str3);
sort(str2,str3);
puts(str3);
puts(str2);
puts(str1);
return 0;
}
关于C语言对字符串指针的注意点和知识点:
1.C语言中字符串可以赋值给字符指针变量,如char * p="I was Chinese!";p中存放的是该字符串的首地址,而char p[]="I was Chinese!"中的数组名p也代表着字符串的首地址。这两个p存放的都是字符串的首位地址,因此在调用函数的时候,参数可以直接传入数组名。虽然两者都代表了字符串的初始地址,但是还是有区别:数组不能在除了初始化以外的其他地方用双引号的形式直接赋值,由于初始化之后,p就是一个常量,不可以改变值,而字符串指针(变量)可以。但是字符串指针初始化之后,不可以再次修改他指向的字符串内容,由于字符串存在文字常量区,这段空间中的内容为只读内容,不能被修改。但是我们可以通过改变指针的指向来改变指针变量的值(修改地址,新的地址里存着其他的值)。
2.输出时用printf("%s\n",p);,[p两者皆可],%s是输出字符串时所用的格式符,则系统先输出它所指向的地址(就是字符串的第一位字符),然后自动++,使之指向下一个字符,然后再输出一个字符.....如此直到遇到字符串结束标志'\0'为止。(gets的输入会使得字符串的最后被自动加了一个‘\0',即使是直接赋值char * p="I was Chinese!"也会在字符串尾加上'/0' ,而printf可以通过‘\0'来判断字符串的终止位置)通过字符数组名或字符指针变量可以输出一个字符串。而对一个数值型数组,是不能用数组名输出它的全部元素的。
3.a[i]的值可以用*(a+i)形式表示。而a[i]元素的地址则是a+i。
如有错误,谢谢指正
(参考文章)
[1].https://baijiahao.baidu.com/s?id=1604208649221500040&wfr=spider&for=pc