第七讲:C++字符串
C++字符串存在字符类型的数组中,存储时以'\0'作为字符串结束标记,因此在定义字符数组大小时,我们必须考虑到'\0'所占的空间。如字符串"zhang"在数组中的存储如下:
定义字符数组:
char a[6];
'z' | ' h' | 'a' | 'n' | 'g' | '\0' |
字符串的输入:
cin>>a;
//将每个字符输入到数组中,并以'\0'作为结束
字符串的输出:
cout<<a;
//输出'\0'之前的所有字符
ASCII码的概念:baike.baidu/view/812.htm
常见字符的ASCII码对照表
字符 | ASCII |
‘0’ | 48 |
‘a’ | 97 |
‘A’ | 65 |
‘ ’ | 32 |
回车 | 13 |
字符串常见函数:
C++系统提供了大量的字符串处理函数,常见的如下:
字符串求长度函数
函数名:strlen(a)
功能:返回字符串中字符的个数
字符串赋值函数
函数名:strcpy(a,b)
功能:将字符串b的赋值到字符串a
1. 字符串比较函数
函数名:strcmp(a,b)
功能:按照ASCII码比较字符串a和字符串b的大小
如果a>b返回1
如果a=b返回0
如果a<b返回-1
2. 字符串连接函数
函数名:strcat(a,b)
功能:将字符串b,连接在字符串a后。
课堂实践:
扫描识别
(scan.cpp)
【问题描述】
“扫描识别”你知道是怎么回事吧?它的意思就是:先用扫描仪把纸上的文字扫描成一个图片,再用识别软件把那个图片中的文字识别出来,最后生成一个文本文件。这对于需要把大量的纸稿录入成电子文档的人来说,当然是非常方便的。
以现有的技术,扫描效果是比较理想的,但识别效果还不十分另人满意,经常会出现错误,尤其是当两个字形状特别接近的时候,而且,这种错误是很难用眼睛看出来的。
我们的纸稿上有一个数字串,识别之后得到的字符串保存在输入文件中,这个串可能有识别错误。已知,可能出现的错误有如下几种:
1、 把数字0错误地识别为大写字母O;
2、 把数字1错误地识别为小写字母l;
3、 把数字2错误地识别为大写字母Z;
4、 把数字5错误地识别为大写字母S;
5、 把数字6错误地识别为小写字母b;
6、 把数字8错误地识别为大写字母B;
7、 把数字9错误地识别为小写字母q。
你的改正方案是:如果字符串中出现了上述字母,请替换为原来的数字。最后把改正之后的数字串输出。
【输入文件】
文件名:scan.in
文件中只有一个字符串,表示识别后得到的字符串。串的长度不超过100。
【输出文件】
文件名:scan.out
文件中只有一个数字串,表示改正后的数字串。
【样例输入】
321lO88BqS
【样例输出】
3211088895
火柴棍游戏
match.cpp
【问题描述】
小时候经常玩摆火柴棍的游戏。所以,下面这个游戏你一定也不陌生。
我们用火柴棍按如下方法摆出0至9的数字:
图中虚线表示预留的位置,实线表示摆放的火柴棍。
现在给你一个摆放好的整数——当然,摆放的相当紧密,除了每个数字中预留的位置之外,不再有其它的空间。请在这个图形中加上适当的火柴,让原有的整数变得最大。
【输入文件】match.in
文件中只有一个合理的正整数(假设该正整数不超过1000位),表示原来用火柴棍摆好的整数。
【输出文件】match.out
文件中有两个整数,分别表示加上适当的火柴之后,由原有的整数得到的最大整数,和新加上了多少根火柴。
【样例输入】
8207
【样例输出】
8889 6
统计字符
(chrstat.cpp)
〖问题描述〗
输入一个字符串,统计其中大写字母、小写字母、数字和其它字符的数量。
〖输入文件〗
文件名:chrstat.in
文件中只有一个字符串。
〖输出文件〗
文件名:chrstat.out
文件中有四个整数用空格分开,分别表示大写字母、小写字母、数字和其它字符的数量。
〖样例输入〗
99?8AABBaabAb11==+
〖样例输出〗
5 4 5 4
数 码 之 和
sum.cpp
【问题描述】
输入一个正整数(假设该正整数的位数小于1000位),输出该数的数码之和。
【输入文件】
输入文件名为:sum.in,该文件中只有一个正整数.
【输出文件】
输出文件名为:sum.out,在第一行第一列位置输出输入文件中数的数码之和.
【样例输入】
123456789
【样例输出】
45
Your Ride Is Here
你要乘坐的飞碟在这里
译 by tim green
一个众所周知的事实,在每一慧星后面是一个不明飞行物UFO。 这些不明飞行物时常来收集来自在地球上忠诚的支持者。 不幸地,他们的空间在每次旅行只能带上一支持者。 他们要做的是用一种聪明的方案让每一个团体人被慧星带走。 他们为每个慧星起了一个名字,通过这些名字来决定一个团体是不是特定的慧星带走。 那个相配方案的细节在下面被给出;
你的工作要写一个程序来通过团体的名字和彗星的名字来决定一个组是否应该与在那一
你的工作要写一个程序来通过团体的名字和彗星的名字来决定一个组是否应该与在那一
颗慧星后面的不明飞行物搭配。
团体的名字和慧星的名字都以下列各项方式转换成一个数字: 这个最后的数字代表名字中所有字母的信息,"A" 是 1 ascii共有多少个字符和 "Z" 是 26。
举例来说,团体 "USACO" 会是 21*19*1*3*15=17955 。 如果团体的数字 mod 47 等于慧星的数字 mod 47,那么你要告诉这个团体准备好被带走 !
写一个程序读入慧星的名字和团体的名字,如果搭配打印"GO"否者打印"STAY"
团体的名字和慧星的名字将会是没有空格或标点的一串大写字母(不超过6个字母),
团体的名字和慧星的名字都以下列各项方式转换成一个数字: 这个最后的数字代表名字中所有字母的信息,"A" 是 1 ascii共有多少个字符和 "Z" 是 26。
举例来说,团体 "USACO" 会是 21*19*1*3*15=17955 。 如果团体的数字 mod 47 等于慧星的数字 mod 47,那么你要告诉这个团体准备好被带走 !
写一个程序读入慧星的名字和团体的名字,如果搭配打印"GO"否者打印"STAY"
团体的名字和慧星的名字将会是没有空格或标点的一串大写字母(不超过6个字母),
Examples:
Input | Output |
COMETQ HVNGAT | GO |
ABSTAR USACO | STAY |
PROGRAM NAME: ride
INPUT FORMAT
第 1 行: | 彗星的名字(一个长度为1到6的字符串) |
第 2 行: | 团体的名字(一个长度为1到6的字符串) |
SAMPLE INPUT (file ride.in)
COMETQ
HVNGAT
OUTPUT FORMAT
单独一行包含"STAR"或"GO".
SAMPLE OUTPUT (file ride.out)
GO
十六进制转换
(hex.cpp)
〖问题描述〗
给定一个十六进制整数,请输出它的十进制形式。
〖输入文件〗
文件名:hex.in
文件中只有一个十六进制整数。
〖输出文件〗
文件名:hex.out
文件中只有一个整数,表示对应的十进制数,保证这个整数不小于0,不大于4000000000。
〖样例输入〗
3F
〖样例输出〗
63
北京队选拔
beijing.cpp
【问题描述】
每年,NOI北京队的五名选手都是当年积分最高的选手。选手积分的计算方法如下:
积分=冬令营成绩×0.2+集训队成绩×0.3+选拔赛成绩×0.5
现在,给出位选手的各项成绩,请编写程序,出当年积分最高的那名选手。
【输入文件】
文件名:beijing.in
文件第一行是一个整数(),表示选手总数。
之后是所有选手的信息,每位选手的信息由4行组成,分别是姓名、冬令营成绩、集训队成绩和选拔赛成绩。
【输出文件】
文件名:beijing.out
文件中只有一个字符串,就是积分最高的那名选手的姓名。可以保证,积分最高的选手只有一人。
【样例输入】
2
Yang
200
300
500
Li
400
200
300
【样例输出】
Yang
学生成绩排序
score.cpp
【问题描述】
从键盘中读入n个学生的姓名与成绩信息,将学生信息按照成绩由大到小排序后输出。
【输入文件】
输入文件名为:score.in,该文件中第一行代表学生的人数,接下来的每行数据分别代表学生的姓名和成绩.
【输出文件】
输出文件名为:score.out,按照成绩由高到低的顺序输出学生及成绩信息。
【样例输入】
3
zhang 98
li 76
sun 99
【样例输出】
sun 99
zhang 98
li 76
字典排序
(dict.cpp)
〖问题描述〗
给出个单词(),每个单词的长度不超过20,请按字典序输出。
〖输入文件〗
文件名:dict.in
文件第一行为整数,之后行,每行一个单词。
〖输出文件〗
文件名:dict.out
文件有行,每行一个单词,即为输入单词的字典序输出。
〖样例输入〗
5
i
ab
c
cc
fca
〖样例输出〗
ab
c
cc
fca
i
身 份 证 效 验 码
(idcard.cpp)
(idcard.cpp)
【问题描述】
我国公民的身份证号码是18位特征组合码,由17位数字本体码和1位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
校验码的计算方法如下:
1. 先对前17位数字(数字本体码)进行加权求和,求和公式如下:
s=∑(Ai*Wi) i=1,2,…,17.
其中,Ai表示第i位置上的身份证号码数字值,Wi表示第i位置上的加权因子。
位置i与加权因子对照表如下:
i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
Wi | 7 | 9 | 10 | 5 | 8 | 4 | 2 | 1 | 6 | 3 | 7 | 9 | 10 | 5 | 8 | 4 | 2 |
2.然后计算S除以11的余数
3.最后通过余数得到对应的校验码。对照表如下:
余数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
校验码 | 1 | 0 | x | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
设计一个程序,根据输入的身份证号码的前17位,输出对应的校验码.
【输入文件】
输入文件名为idcard.in,文件中只有一个长度为17的身份证号码。
【输出文件】
输出文件名:idcard.out,文件中只有一个字符,该字符为身份证所对应的校验码。
【样例输入】
150********203581
【样例输出】
0
ISBN号码
(isbn.cpp)
【问题描述】
每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论