模拟题介绍
入门模拟题 分为简单模拟,查找元素,图形输出,日期处理,进制转换
字符串处理等等!
何为模拟题?
模拟题是一类“题目怎么说,你就怎么做的”的一类题目。此类题目不涉及算法,完全根据题目描述进行代码的编写,主要考察代码能力!!!
模拟题 ———— 字符串处理
【PAT B1009】 说反话 (20分)
字符串处理问题很能体现代码能力的一种题型,一般实现逻辑会非常麻烦,而且可能会有很多的细节和边界情况,因此对代码能力弱的会有较大难度,但这也是进阶大神的必经之路。唯一的方法:多做多想,积累经验!!!
【PAT B1009】 说反话 (20分)
该题本身难度不大且非常容易!!!但你能想到几种做法呢?
方法1 : 直接但稍微复杂一点的,我自己想到的做法!
方法2 : 既简单且简洁,值得我们掌握
方法3 :采用二维数组存储,以空格分开,输出打印更加直观
无论哪种方法,建议三种方法都了解并掌握一下!
ONE
采用逆序遍历并同时打印
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
string str;
getline(cin, str);
int len = str.length();
int j, k = len - 1;
for (int i = len - 1; i >= 0; i--) {
if (str[i] == ' ' || i == 0)
{
if (i == 0)
{
for (j = i ; j <= k; j++)
printf("%c", str[j]);
}
else {
for (j = i + 1; j <= k; j++)
printf("%c", str[j]);
printf("%c",str[i]);
k = i - 1;
}
}
}
return 0;
}
TWO
利用scanf输入以空格结束的特点,即简单又简洁!
#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(" ");
}
return 0;
}
THREE
采用二维数组来存储字符串,最后遍历输出
注意:有gets语句不要在C++里提交,否则可能会导致编译错误
#include <stdio.h>
#include <string.h>
int main()
{
char str[90];
gets(str);
int len = strlen(str), r = 0, h = 0;
char ans[90][90];
for (int i = 0; i < len; i++) {
if (str[i] != ' ')
ans[r][h++] = str[i];
else {
ans[r][h] = '\0';//这个一定不能忘
r++;
h = 0;
}
}
for (int i = r; i >= 0; i--)
{
printf("%s", ans[i]);
if (i > 0) printf(" ");
}
return 0;
}