#B2. 字符数组与字符串题解
字符数组与字符串题解
A1129 统计数字字符个数
题意
输入一行字符,统计出其中数字字符的个数。
题解
数字字符'0'-'9',对应ASCII码48-57。
方法1:string输入,getline(cin, s);
方法2:char输入,while(cin>>c);
方法3:char s[]输入,gets(s);注意看数据范围开数组。
A1130 找第一个只出现一次的字符
题意
给定一个只包含小写字母的字符串,找到第一个仅出现一次的字符。如果没有,输出no。
题解
记录每个字符出现的次数。首先,遍历字符串,对每个字符进行计数。然后,再次遍历字符串,找到第一个出现次数为1的字符即可。时间复杂度O(n)。
A1134 合法C标识符查
题意
给定一个不包含空白符的字符串,请判断是否是C语言合法的标识符号(注:题目保证这些字符串一定不是C语言的保留字)。
C语言标识符要求:
1.非保留字;
2.只包含字母、数字及下划线(“_”)。
3.不以数字开头。
如果它是C语言的合法标识符,则输出yes,否则输出no。
题解
我们可以使用简单的字符串处理方法来解决这个问题。具体步骤如下:
- 首先,检查字符串是否以数字开头。如果以数字开头,则不符合要求,直接输出“no”并结束程序。
- 接下来,检查字符串是否只包含字母、数字和下划线。可以使用一个循环遍历字符串中的每个字符,如果有任何一个字符不是字母、数字或下划线,则不符合要求,直接输出“no”并结束程序。
- 最后,检查字符串是否是C语言的保留字。由于题目保证输入的字符串不是保留字,因此这一步可以省略。
- 如果以上三个条件都满足,则输出“yes”。
A1136 密码翻译
题意
对给定的一个字符串,把其中从a-y,A-Y的字母用其后继字母替代,把z和Z用a和A替代,其他非字母字符不变,输出处理后的字符串。
题解
按题意处理,s[i] = (s[i] + 1) % 'A' + 'A';。
A1137 加密的病历单
题意
加密规则如下,给你一个加密后的字符串,输出解密后的字符串。
1.原文中所有的字符都在字母表中被循环左移了三个位置(dec -> abz)
2.逆序存储(abcd -> dcba )
3.大小写反转(abXY -> ABxy)
题解
按题意处理。(大小写转换:'a'-'A'==32)
A1138 将字符串中的小写字母转换成大写字母
题意
给定一个字符串,将其中所有的小写字母转换成大写字母。
题解
按题意处理。
A1140 验证子串
题意
输入两个字符串,验证其中一个串是否为另一个串的子串。
题解
方法1:两重循环遍历字符串和子串,比较每个字符进行匹配。
方法2:调用find()函数。
A1141 删除单词后缀
题意
给定一个单词,如果该单词以er、ly或者ing后缀结尾, 则删除该后缀(题目保证删除后缀后的单词长度不为0), 否则不进行任何操作。
题解
如果字符串有后缀,则输出到后缀前一位字符。否则完整输出字符串。
A1142 单词的长度
题意
输入一行单词序列,相邻单词之间由1个或多个空格间隔,请对应地计算各个单词的长度。
题解
遍历字符串,遇到字符,cnt++;遇到空格且cnt不为0,输出cnt,cnt=0。遍历结束之后,若cnt大于0,输出cnt。
A1143 最长最短单词
题意
输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空格和逗号。单词由至少一个连续的字母构成,空格和逗号都是单词间的间隔。
试输出第1个最长的单词和第1个最短单词。
题解
后台数据不够强,没卡掉部分同学的代码,例如输入为"aaaa ",部分通过的同学代码无法输出最长单词"aaaa"和最短单词"aaaa"。
方法1:minn为最短单词长度,初始化为101;maxx为最长单词长度,初始化为0。
遍历字符串,遇到字符,cnt++;遇到空格或逗号,且cnt不为0,比较cnt和minn和maxx,更新最长最短单词,cnt=0。
遍历结束之后,若cnt不为0,比较cnt和minn和maxx,更新最长最短单词。
方法2:输入之后,在字符串最后添加空格,这样就不需要最后再处理一次cnt。
A1144 单词翻转
题意
输入一个句子(一行),将句子中的每一个单词翻转后输出。
题解
方法1:while(cin>>s),逆序输出s。
方法2:getline(cin,s),遍历s,记录每个单词的开始位置,遇到空格则逆序输出。
A1146 判断字符串是否为回文
题意
输入一个字符串,输出该字符串是否回文。回文是指顺读和倒读都一样的字符串。
题解
方法1:双指针从两端往中间扫。
方法2:将字符串逆序,与原串比较,一致则是回文串。
A1147 最高分数的学生姓名
题意
输入学生的人数,然后再输入每位学生的分数和姓名,求获得最高分数的学生的姓名。
题解
找最大分数,输出对应学生名字。
A1148 连续出现的字符
题意
给定一个字符串,在字符串中找到第一个连续出现至少k次的字符。
题解
遍历字符串,统计当前字符出现次数,若达到k,输出。
A1149 最长单词2
题意
一个以‘.’结尾的简单英文句子,单词之间用空格分隔,没有缩写形式和其它特殊形式。输出该句子中最长的单词。如果多于一个,则输出第一个。
题解
修改''最长最短单词''的代码即可。
P242 【例40.3】ISBN码
题意
判断输入的 ISBN 号码中识别码是否正确,如果正确,则仅输出"Right";如果错误,则输出你认为是正确的 ISBN 号码。
题解
按题意模拟即可。