#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。

题解

我们可以使用简单的字符串处理方法来解决这个问题。具体步骤如下:

  1. 首先,检查字符串是否以数字开头。如果以数字开头,则不符合要求,直接输出“no”并结束程序。
  2. 接下来,检查字符串是否只包含字母、数字和下划线。可以使用一个循环遍历字符串中的每个字符,如果有任何一个字符不是字母、数字或下划线,则不符合要求,直接输出“no”并结束程序。
  3. 最后,检查字符串是否是C语言的保留字。由于题目保证输入的字符串不是保留字,因此这一步可以省略。
  4. 如果以上三个条件都满足,则输出“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 号码。

题解

按题意模拟即可。