【C&C++】1009 说反话 (20 分)


我做了个pta乙级题解的专栏,欢迎来专栏看~

C

#include<stdio.h>
#include<string.h>

int main()
{
    char s[80][80];
    
    int i = 0;
    for(;;i++)
    {
        scanf("%s",s[i]);
        if(getchar() == '\n')
        {
            break;
        }
    }
    for(;i >= 0;i--)
    {
        printf("%s",s[i]);
        if(i != 0)
        {
            printf(" ");
        }
    }
    return 0;
}

这一题开始,我注意到了自己在字符串方面的缺陷,特别是当输入字符串时,我遇到了很大的问题

C++ 运行超时 18’/20’

提交结果
这题在处理空格和回车的时候,我没有考虑到位,下面的18分代码,我错在了(标记出来的)先获取一个字符,并判断是否为回车,其实这样做会导致一个错误:使得输入的开始的一个字符(也许是有效字母)无法被存入words数组。(这一点我在第二次的c++代码中改正了)

#include <iostream>
#include <array>
#include <string>
using namespace std;

array<string, 80> words = {};
int k = 0; // words下标

int main()
{
	bool flag = true; // 是否刚开始输入
	char ch=0,chFlag=0;

	/*cin.get()的使用,可以吸收题中所说的单词间的空格,
	以及输入完成后的回车
	*/
	while ((ch = cin.get()) != '\n')
	{
		if (flag)
		{
			chFlag = ch;
			flag = false;
		}
		cin >> words[k++];
	}

	for (int i = k - 1; i >= 0; i--)
	{
		if (i!= k - 1)
		{
			cout << " ";
		}
		if (0 == i) // 将第一个保留的字符,加入words中对应的单词
		{
			cout << chFlag;
		}
		cout << words[i];
	}

	return 0;
}

C++ 20’/20’

要注意:空格 回车处理的方式。关于“判断回车”这一步的位置,在这一题中,“判断回车”这一步应该在获得了一个单词之后进行。

#include <iostream>
#include <array>
#include <string>
using namespace std;

array<string, 80> words = {};
int k = 0; // words下标

int main()
{
	string s = "";

	while (true)
	{
		cin >> s;
		words[k++] = s;
		if (cin.get() == '\n')
		{
			break;
		}
	}

	for (int i = k - 1; i >= 0; i--)
	{
		if (i != k - 1)
		{
			cout << " ";
		}
		cout << words[i];
	}

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值