多种解法 ——【PAT B1009】 说反话 (20分)

模拟题介绍

入门模拟题 分为简单模拟,查找元素,图形输出,日期处理,进制转换
字符串处理等等!

何为模拟题?

模拟题是一类“题目怎么说,你就怎么做的”的一类题目。此类题目不涉及算法,完全根据题目描述进行代码的编写,主要考察代码能力!!!

模拟题 ———— 字符串处理
【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;
}
©️2020 CSDN 皮肤主题: 岁月 设计师:pinMode 返回首页