算法笔记2.7 问题 D: C语言10.15

题目描述

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

[2].https://www.cnblogs.com/skullboyer/p/7807543.html

[3].https://www.cnblogs.com/geziyu/p/9689848.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值