您的位置:首页 > 编程语言 > C语言/C++

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

2020-03-08 16:14 239 查看

有目录~


我做了个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;
}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
似个编程机器 发布了15 篇原创文章 · 获赞 1 · 访问量 521 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: