【PTA-乙级】1009-说反话 (三种解法)

2023-10-17 22:30

本文主要是介绍【PTA-乙级】1009-说反话 (三种解法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言: 更新: 之前的前言是我说我写的第一种解法测试点3过不去,经过若干天后我重新看这个题。仍然觉得没问题 然后把字符数组的大小改为82就过了测试点3。 鬼知道什么情况。应该是输入的测试用例不规范吧

题目:

解法1  char型数组与string数组赋值解法:

#include<iostream>
#include<cstring>
using namespace std;
int main()
{char arr[82] = {0};int i = 0;while ((arr[i] = getchar()) != '\n')i++;// 用来存放每一个单词string brr[40];char* p = arr;int a = 0;// 调整字符串for (int j = 0; j < 81; j++){if (arr[j] == ' ' || arr[j] == '\n')arr[j] = '\0';}// 正序存放单词while (*p != '\0'){brr[a] = p;while (*p != '\0')p++;p++;a++;}//  逆序打印单词for (int i = a - 1; i >= 0; i--){cout << brr[i];if (i == 0)break;cout << " ";}
}

注:1.  如果把这个代码整体调试一遍   会让你对字符数组,string类型对象,缓冲区等有更深的理解 (对于我来说) 建议调试一遍

2.  如果把一个字符数组里面的内容存放在一个string类型的对象中   空格不会作为终止符  只有'\0'才会终止  如下图  这也是为什么存放单词之前要对字符串调整 让每个单词成功存入string数组中

解法2  :string数组解法(最简单的解法)

#include<iostream>
using namespace std;
#include<cstring>
int main()
{//string c;//cin >> c;    //输入时 空格 \n都会称为终止输入的标志//Hello' 'World' 'Here' 'I' 'Come'\n'string arr[80];int a = 0;char c;while (1){cin >> arr[a];a++;c = getchar();if (c == '\n')break;}for (int i = a - 1; i >= 0; i--){cout << arr[i];if (i == 0)break;cout << " ";}return 0;
}

注:  在输入string类型对象时   ' '  和  ‘\n' 都会作为输入终止的标志 所以在循环输入时  完全可以放心可以把正确的单词输入进string型数组中  最后把'\n'作为循环终止的标志  退出循环即可

解法3 :char型二维数组解法

#include<iostream>
using namespace std;
#include<cstring>// 1009说反话 解法3:
int main()
{char arr[81][81];char c;int length = 0;int i = 0;//Hello ' ' World ' ' Here ' ' I ' ' Come '\n'while ((c = getchar()) != '\n'){if (c != ' '){arr[length][i] = c;i++;}else{arr[length][i] = '\0';length++;i = 0;}}arr[length][i] = '\0';for (int i = length; i >= 0; i--){cout << arr[i];if (i == 0)break;cout << " ";}return 0;
}

这个解法是  创建char型二维数组 把每个单词放置一行中  由于打印时会因'\0'终止 所以逆序打印出结果即可  

总结:  如果可以把三种解法都调试一遍 会对数据的存入与读取有更深的理解;(别忘了解法1的测试点3过不去)

这篇关于【PTA-乙级】1009-说反话 (三种解法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/228374

相关文章

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Spring IOC的三种实现方式详解

《SpringIOC的三种实现方式详解》:本文主要介绍SpringIOC的三种实现方式,在Spring框架中,IOC通过依赖注入来实现,而依赖注入主要有三种实现方式,构造器注入、Setter注入... 目录1. 构造器注入(Cons编程tructor Injection)2. Setter注入(Setter

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

python修改字符串值的三种方法

《python修改字符串值的三种方法》本文主要介绍了python修改字符串值的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录第一种方法:第二种方法:第三种方法:在python中,字符串对象是不可变类型,所以我们没办法直接

MySQL中删除重复数据SQL的三种写法

《MySQL中删除重复数据SQL的三种写法》:本文主要介绍MySQL中删除重复数据SQL的三种写法,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录方法一:使用 left join + 子查询删除重复数据(推荐)方法二:创建临时表(需分多步执行,逻辑清晰,但会

在Spring中配置Quartz的三种方式

《在Spring中配置Quartz的三种方式》SpringQuartz是一个任务调度框架,它允许我们定期执行特定的任务,在Spring中,我们可以通过多种方式来配置Quartz,包括使用​​@Sche... 目录介绍使用 ​​@Scheduled​​ 注解XML 配置Java 配置1. 创建Quartz配置

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

PTA求一批整数中出现最多的个位数字

作者 徐镜春 单位 浙江大学 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。 输出格式: 在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n