每日一水之strcmp用法

简介: strcmp函数 C/C++函数,比较两个字符串 设这两个字符串为str1,str2, 若str1==str2,则返回零; 若str1str2,则返回正数。 规则 当s1s2时,返回正数。 即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。
strcmp函数
C/C++函数,比较两个字符串
设这两个字符串为str1,str2,
若str1==str2,则返回零;
若str1<str2,则返回负数;

若str1>str2,则返回正数。

规则
当s1<s2时,返回为负数;
当s1==s2时,返回值= 0;
当s1>s2时,返回正数。
即:两个 字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:
"A"<"B" "a">"A" "computer">"compare"
特别注意:strcmp(const char *s1,const char * s2)这里面只能比较字符串,即可用于比较两个字符串常量,或比较数组和字符串常量,不能比较数字等其他形式的参数。
ANSI标准规定,返回值为正数,负数,0 。而确切数值是依赖不同的C实现的。


P1001 谁拿了最多奖学金

描述
某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同:
1) 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;
2) 五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得;
3) 成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得;
4) 西部奖学金,每人1000元,期末平均成绩高于85分(>85)的西部省份学生均可获得;
5) 班级贡献奖,每人850元,班级评议成绩高于80分(>80)的学生干部均可获得;
只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。例如姚林的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。
现在给出若干学生的相关数据,请计算哪些同学获得的奖金总数最高(假设总有同学能满足获得奖学金的条件)。
格式
输入格式
输入的第一行是一个整数N(1 <= N <= 100),表示学生的总数。接下来的N行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。姓名是由大小写英文字母组成的长度不超过20的字符串(不含空格);期末平均成绩和班级评议成绩都是0到100之间的整数(包括0和100);是否是学生干部和是否是西部省份学生分别用一个字符表示,Y表示是,N表示不是;发表的论文数是0到10的整数(包括0和10)。每两个相邻数据项之间用一个空格分隔。
输出格式
输出包括三行,第一行是获得最多奖金的学生的姓名,第二行是这名学生获得的奖金总数。如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名。第三行是这N个学生获得的奖学金的总数。
样例1
样例输入1
4
YaoLin 87 82 Y N 0
ChenRuiyi 88 78 N Y 1
LiXin 92 88 N N 0
ZhangQin 83 87 Y N 1
样例输出1
ChenRuiyi
9000
28700
限制
1s
来源

NOIP2005 第一题

记录信息

评测状态 Accepted
题目 P1001 谁拿了最多奖学金
递交时间 2017-01-24 09:47:38
代码语言 C++
评测机 ShadowShore
消耗时间 0 ms
消耗内存 732 KiB
评测时间 2017-01-24 09:47:40

评测结果

编译成功

foo.cpp: In function 'int main()':
foo.cpp:13:45: warning: format '%s' expects argument of type 'char*', but argument 2 has type 'char (*)[21]' [-Wformat=]
scanf("%s%d%d",&name,&ave1,&ave2);
^
foo.cpp:15:36: warning: format '%s' expects argument of type 'char*', but argument 2 has type 'char (*)[2]' [-Wformat=]
scanf("%s%s%d",&c,&d,&e);
^
foo.cpp:15:36: warning: format '%s' expects argument of type 'char*', but argument 3 has type 'char (*)[2]' [-Wformat=]

测试数据 #0: Accepted, time = 0 ms, mem = 732 KiB, score = 10

测试数据 #1: Accepted, time = 0 ms, mem = 732 KiB, score = 10

测试数据 #2: Accepted, time = 0 ms, mem = 728 KiB, score = 10

测试数据 #3: Accepted, time = 0 ms, mem = 728 KiB, score = 10

测试数据 #4: Accepted, time = 0 ms, mem = 728 KiB, score = 10

测试数据 #5: Accepted, time = 0 ms, mem = 728 KiB, score = 10

测试数据 #6: Accepted, time = 0 ms, mem = 728 KiB, score = 10

测试数据 #7: Accepted, time = 0 ms, mem = 728 KiB, score = 10

测试数据 #8: Accepted, time = 0 ms, mem = 728 KiB, score = 10

测试数据 #9: Accepted, time = 0 ms, mem = 728 KiB, score = 10

Accepted, time = 0 ms, mem = 732 KiB, score = 100

/*此题我也是有点纳闷,后来看别人的题解,要用到strcmp函数会过,或者直接暴力枚举就会过*/

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5 int n,ave1,ave2,e,ch[101];
 6 char name[21],maxname[21],c[2],d[2];
 7 memset(ch,0,sizeof(ch)); //数组要清零
 8 while(scanf("%d",&n)!=EOF)
 9 {
10 int max=0,count=0;
11 for(int i=0;i<n;i++)
12 {
13 scanf("%s%d%d",&name,&ave1,&ave2);
14 getchar();
15 scanf("%s%s%d",&c,&d,&e);
16 if(ave1>80&&e>=1)ch[i]+=8000;
17 if(ave1>85&&ave2>80)ch[i]+=4000;
18 if(ave1>90)ch[i]+=2000;
19 if(ave1>85&&strcmp(d,"Y")==0)ch[i]+=1000;//比较的是ASCII码表上的值,其实是若两个字符不相同,那就返回0,说明命题为真!
20 if(ave2>80&&strcmp(c,"Y")==0)ch[i]+=850;//这里也是一个意思
21 count+=ch[i];
22 if(ch[i]>max)
23 {
24 max=ch[i];
25 strcpy(maxname,name);
26 }
27 }
28 printf("%s\n%d\n%d\n",maxname,max,count);
29 }
30 return 0;
31 }

 

 

目录
相关文章
|
IDE 编译器 开发工具
Dev C++下载地址和安装教程(图解版)
Dev C++ 是一款免费开源的 C/C++ IDE,内嵌 GCC 编译器(GCC 编译器的 Windows 移植版),是 NOI、NOIP 等比赛的指定工具。Dev C++ 的优点是体积小(只有几十兆)、安装卸载方便、学习成本低,缺点是调试功能弱。
51651 0
Dev C++下载地址和安装教程(图解版)
H8
|
物联网 数据安全/隐私保护 智能硬件
女朋友问: 你知道蓝牙耳机的原理吗?
蓝牙是一种无线通讯技术标准,用来让固定与移动设备,在短距离间交换资料,以形成个人局域网(PAN)。其使用短波特高频(UHF)无线电波,经由2.4至2.485GHz的ISM频段来进行通信。1994年由电信商(Ericsson)发展出这个技术。它最初的设计,是希望创建一个RS-232数据线的无线通信替代版本。
H8
597 0
|
Linux 网络安全
树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)
树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)
树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)
|
程序员 C++
C++模板元编程入门
【7月更文挑战第9天】C++模板元编程是一项强大而复杂的技术,它允许程序员在编译时进行复杂的计算和操作,从而提高了程序的性能和灵活性。然而,模板元编程的复杂性和抽象性也使其难以掌握和应用。通过本文的介绍,希望能够帮助你初步了解C++模板元编程的基本概念和技术要点,为进一步深入学习和应用打下坚实的基础。在实际开发中,合理运用模板元编程技术,可以极大地提升程序的性能和可维护性。
|
12月前
|
Ubuntu Java Linux
玩转Ubuntu零基础教程,让你成为Ubuntu高手。
本教程将介绍Ubuntu操作系统的各个方面。它探讨了Ubuntu桌面版的各种功能,风格和工作。比较我们通常会在Windows操作系统上找到的软件。有一些专注于Ubuntu服务器版本的章节。本教程还包括有兴趣了解Ubuntu的虚拟机和云端的人员的独立章节。
272 1
玩转Ubuntu零基础教程,让你成为Ubuntu高手。
|
编译器 C++ 开发者
C++一分钟之-属性(attributes)与属性语法
【7月更文挑战第3天】C++的属性(attributes)自C++11起允许附加编译器指令,如`[[nodiscard]]`和`[[maybe_unused]]`,影响优化和警告。注意属性放置、兼容性和适度使用,以确保代码清晰和可移植。示例展示了如何使用属性来提示编译器处理返回值和未使用变量,以及利用编译器扩展进行自动清理。属性是提升代码质量的工具,但应谨慎使用。
320 13
|
Ubuntu Linux C语言
嵌入式Linux系列第2篇:运行Hello World
嵌入式Linux系列第2篇:运行Hello World
|
C语言 C++
CLion2022安装与使用
CLion2022安装与使用
278 0
CLion2022安装与使用
|
前端开发
Clion注释缩进设置
Clion注释缩进设置
207 2
|
编译器 C语言 Windows
windows MinGW C语言编译器安装及环境变量配置教程
MinGW被称为Windows版的GCC,安装包下载地址:提示:该安装包下载完之后,相当于安装好了MinGW,之后即可配置环境变量!所以,可以先新建好一个专门用来存放MinGW安装包的文件夹。
415 2