🥍1.6 字符串处理
字符串处理是考试中常见的问题,这种题型主要考察的是细心和代码能力,一定要注意边界条件的判断。 这种题最好的方法就是多想,多做,积累经验!!
问题 I: 【字符串】回文串
题目描述
读入一串字符,判断是否是回文串。“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。
输入格式:
一行字符串,长度不超过255。
输出格式:
一行字符串,长度不超过255。
样例输入
12321
样例输出
YES
解题思路
假设字符串str的下标从0开始,由于回文串正读和反读都一样所以只要遍历字符串的前一半,不需要读到len/2因为那是正中间的位置,如果全都相等就说明是回文串,否则说明不是。
参考代码
#include<cstdio> #include<string.h> #include<iostream> using namespace std; const int maxn = 256; bool judge(char str[]){ int len = strlen(str); for(int i = 0;i < len / 2;i++) if(str[i] != str[len - 1 - i]) return false; return true; } int main(){ char str[maxn]; while(cin.getline(str,256)){ bool flag = judge(str); if(flag) printf("YES\n"); else printf("NO\n"); } return 0; }
【PAT B1009】1009 说反话 (20 分)
题目描述
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
样例输入
Hello World Here I Come
样例输出
Come I Here World Hello
解题思路
使用cin.getline读入一行,用空格对字符串进行分割,并顺序保存到二维数组中。
注意点:
最后如果输出空格会造成错误。
由于PAT是单点测试,所以可以使用以下写法
参考代码
#include<cstdio> int main(){ int num = 0; char ans[90][90]; while(scanf("%s",ans[num++]) != EOF) num++; for(int i = num - 1;i >= 0;i--){ printf("%s",ans[i]); if(i > 0) printf(" "); } puts(""); return 0; }
解题思路2
有些地方可能是多点测试,那么就得老老实实拆分数组了。
参考代码
#include<cstdio> #include<iostream> #include<cstring> using namespace std; int main(){ char str[90]; while(cin.getline(str,90)){ int len = strlen(str), row = 0, col = 0; char ans[90][90]; //printf("%s %d",str,len); for(int i = 0;i < len;i++){ if(str[i] != ' ') ans[row][col++] = str[i]; else{ ans[row][col] = '\0'; row++; //printf("%d 1",col); col = 0; } } ans[row][col] = '\0'; for(int i = row; i >= 0; i--){ printf("%s",ans[i]); if(i > 0) printf(" "); } puts(""); } return 0; }
🐳课后习题
今天的题目难度有点,但是是真滴多(量力而行,太多了,每章不带字母的必做,带字母自己选择),我写完会放题解,大家写完了可以在评论区打卡哟!题解我放评论区吧,这样不用修改文章。
对应章节 题目 相同链接
简单模拟 3.1小节——入门模拟->简单模拟
简单模拟 B1001 害死人不偿命的(3n+1)猜想 (15 分)
简单模拟 B1011 A+B 和 C (15 分)
简单模拟 B1016 部分A+B (15 分)
简单模拟 B1026 程序运行时间 (15 分)
简单模拟 B1046 划拳 (15 分)
简单模拟 B1008 数组元素循环右移问题 (20 分)
简单模拟 B1012 数字分类 (20 分)
简单模拟 B1018 锤子剪刀布 (20 分)
简单模拟 A1042 Shuffling Machine (20 分)
简单模拟 A1046 Shortest Distance (20 分)
简单模拟 A1065 A+B and C (64bit) (20 分)
简单模拟 B1010 一元多项式求导 (25 分)
简单模拟 A1002 A+B for Polynomials (25 分)
简单模拟 A1009 Product of Polynomials (25 分)
查找元素 3.2小节——入门模拟->查找元素
查找元素 B1041 考试座位号 (15 分)
查找元素 B1004 成绩排名 (20 分)
查找元素 B1028 人口普查 (20 分)
查找元素 B1032 挖掘机技术哪家强 (20 分)
查找元素 A1006 Sign In and Sign Out (25 分)
查找元素 A1011 World Cup Betting (20 分)
查找元素 A1036 Boys vs Girls (25 分)
图形输出 3.3小节——入门模拟->图形输出
图形输出 B1036 跟奥巴马一起编程 (15 分)
图形输出 B1027 打印沙漏 (20 分)
图形输出 A1031 Hello World for U (20 分)
日期处理 3.4小节——入门模拟->日期处理
进制转换 3.5小节——入门模拟->进制转换
进制转换 B1022 D进制的A+B (20 分)
进制转换 B1037 在霍格沃茨找零钱 (20 分)
进制转换 A1019 General Palindromic Number (20 分)
进制转换 A1027 Colors in Mars (20 分)
进制转换 A1058 A+B in Hogwarts (20 分)
字符串处理 3.6小节——入门模拟->字符串处理
字符串处理 B1006 换个格式输出整数 (15 分)
字符串处理 B1021 个位数统计 (15 分)
字符串处理 B1031 查验身份证 (15 分)
字符串处理 B1002 写出这个数 (20 分)
字符串处理 B1009 说反话 (20 分)
字符串处理 B1014 福尔摩斯的约会 (20 分) A1061 Dating (20 分)
字符串处理 B1024 科学计数法 (20 分) A1073 Scientific Notation (20 分)
字符串处理 B1048 数字加密 (20 分)
字符串处理 A1001 A+B Format (20 分)
字符串处理 A1005 Spell It Right (20 分)
字符串处理 A1035 Password (20 分)
字符串处理 A1077 Kuchiguse (20 分)
字符串处理 A1082 Read Number in Chinese (25 分)