输入输出与测试方法

对于刚开始接触OJ(Online Judge)的同学估计对于OJ的输入输出存在疑惑,OJ的输入输出基本都是使用标准输入输出(也称标准I/O,即直接读键盘、写屏幕)。
OJ的判题方式则是使用输入输出重定向到文件

./test < data_in > data_out

可执行文件test中使用标准输入输出,data_in是输入文件,data_out是输出文件,最后将test的输出data_out与答案文件比对判断程序是否运行正确。
我们在测试自己的程序时,可以在代码里加入重定向语句来方便测试,但是必须注意:自我测试完毕之后删除重定向语句,再提交代码。
代码里重定向方法:

#define LOCAL //在提交代码时注释掉#include<stdio.h>int main(){
#ifdef LOCALfreopen("data.in", "r", stdin);//将data.in改为输入文件路径freopen("data.out", "w", stdout);//将data.out改为输出文件路径
#endifreturn 0;
}

随后,正常使用C/C++的标准输入,都会定向到上述两个文件中,以便于自测代码。

字符串

C语言中的字符串就是字符数组,处处受限。例如,如何编写一个函数,把两个字符串拼接成一个长字符串?
这个任务看上去简单,实际上却暗藏陷阱:新字符串的存储空间从哪里来?
不能在函数中定义一个数组然后返回它的地址,因为函数返回后其中局部变量的地址便失效了。因此“字符串拼接”函数必须申请新的内存空间以存放结果,用完之后还要将申请的空间“退回去”,这会很麻烦。另外,字符串数组本身并不保存字符串长度,每次需要时都要用strlen函数重算一次。如果字符串很长,则strlen函数的开销将不容忽视。
为了避免不必要的strlen调用,可以在某个变量中保存字符串的长度,但这样一来,程序会变得更加复杂,难以调试。总而言之,C语言处理字符串并不方便。
C++提供了一个新的string类型,用来替代C语言中的字符数组。用户仍然可以继续用字符数组当字符串用,但是如果希望程序更加简单、自然,string类型往往是更好的选择。例如,C++的cin/cout可以直接读写string类型,却不能读写字符数组;string类型还可以像整数那样“相加”,而在C语言里只能使用strcat函数。
C++在string头文件里定义了string类型,直接支持流式读写。
string有很多方便的函数和运算符,但速度有些慢。考虑这样一个题目:输入数据的每行包含若干个(至少一个)以空格隔开的整数,输出每行中所有整数之和。如果只能使用字符与字符数组,一般有两种方案:一是使用getchar( )边读边算,代码较短,但容易写错,并且相对较难理解;二是每次读取一行,然后再扫描该行的字符,同时计算结果。如果使用C++,代码可以很简单。

#include<iostream>
#include<string>
#include<sstream>using namespace std;int main() {string line;while(getline(cin, line)) {int sum = 0, x;stringstream ss(line);while(ss >> x) sum += x;cout << sum << "\n";}return 0;
}

string类在string头文件中,而stringstream在sstream头文件中。首先用getline函数读一行数据(相当于C语言中的fgets,但由于使用string类,无须指定字符串的最大长度),然后用这一行创建一个“字符串流”——ss。接下来只需像读取cin那样读取ss即可。
可以把string作为流进行读写,定义在sstream头文件中。
对于字符串的操作请尽量使用C++提供的string方法!
思考:如果输入数据不是以空格进行分隔的,是特殊字符如*、|等怎么处理?

只需扫描整个字符串,将特殊字符全部替换成空格即可

转载于:https://www.cnblogs.com/migoo/p/8716529.html

刷OJ时输入输出与字符串相关推荐

  1. 对于刷oj时因为scanf()出现wa而cin却AC的详解 【scanf() 和 cin 详解】

    故事还得从昨天讲起,昨天做了一道题及其的诡异,用cin输入AC了.用scanf()却一直的报错或者陷入了 死循环.这让我很费解,我用了fflush(stdin)来排除,发现没有效果.后来我想起之前写过 ...

  2. 关于我在刷题时用OJ判题发现的cout相较于printf严重超时的问题

    今天刷题时碰到用cout输出时时间时printf的20多倍的情况,不知道时OJ的判题机制还是cout在效率上的问题? 仅作展示,我也不知道为啥,有大佬解答一下吗? 题目如下: 题目名称:血色先锋队 时 ...

  3. 更高效地刷OJ——String常用方法(一)

    因为常用方法较多,所以分为3篇 1.length() : 返回字符串长度,此处的length有别于数组中的length数组中的length为属性,此处的length为方法. 2.charAt() :将 ...

  4. 关于用Go做一些OJ时遇到的问题

    关于用Go做一些OJ时遇到的问题 总体上来说oj还是适合用c/c++来做,因为很多oj对他们输入样例处理很完善,但是对于小众语言Go来说,却不是那么好,或者来说,处理输入的方法有点麻烦: 另外吐槽这种 ...

  5. 算法刷题时经常用到的前缀和思想

    今天我们来说一下刷题时经常用到的前缀和思想,前缀和思想和滑动窗口会经常用在求子数组和子串问题上,当我们遇到此类问题时,则应该需要想到此类解题方式,该文章深入浅出描述前缀和思想,读完这个文章就会有属于自 ...

  6. 使用JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength属性...

    使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错.字符串的长度超过了为 maxJsonLength 属性设置的值. 解决办法是在web.config增加如下节点到& ...

  7. 将数据转化成字符串时:用字符串的链接 还是 StringBuilder

    /*目的:将数据转化成字符串时:用字符串的链接 还是 StringBuilder呢? */ public class Test{public static void main(String[] arg ...

  8. PTA11、 输入输出-计算字符串中的数 (10 分)

    11. 输入输出-计算字符串中的数 (10 分) 将字符串中的每个数都抽取出来,然后统计所有数的个数并求和. 输入格式: 一行字符串,字符串中的数之间用1个空格或者多个空格分隔. 输出格式: 第1行: ...

  9. DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台、刷题集合、问题为导向的十大类刷题算法(数组和字符串、栈和队列、二叉树、堆实现、图、哈希表、排序和搜索、动态规划/回溯法/递归/贪心/分治)总

    DSt:数据结构的最强学习路线之数据结构知识讲解与刷题平台.刷题集合.问题为导向的十大类刷题算法(数组和字符串.栈和队列.二叉树.堆实现.图.哈希表.排序和搜索.动态规划/回溯法/递归/贪心/分治)总 ...

最新文章

  1. 又一家明星机器人公司倒掉:曾是全球机器人技术50强,主打性价比AI机械臂
  2. Python代码注释
  3. docker 内存 cpu 限制 简介
  4. 使用mysql备份工具innobackupex进行本地数据备份、恢复操作实例
  5. Java的最新发展– 2018年4月下旬
  6. mysql格式分隔符row_MySQLRow格式Binlog的解析(1)
  7. 界面优美的linux,Ubuntu 11.04新版发布 诠释精美用户界面
  8. ResultSet: 结果集对象
  9. 使用decode函数
  10. 【Mac】Mac键盘实现Home, End, Page UP, Page DOWN
  11. L2-003 月饼 (25 point(s))
  12. hyperledger fabric first network 只关闭停掉节点 不删除证书
  13. 紫色飞猪:基于K8s的集群稳定架构
  14. dell服务器配置信息,DELL服务器配置(710)
  15. python导入wx_Python“导入wx”
  16. 爱情不是等你有空才珍惜的
  17. 推荐好友和共同好友sql
  18. C#实现jQuery的方法连缀
  19. 越狱设备装 ipa包
  20. 操作系统----进程管理(C语言)

热门文章

  1. Android Service演义
  2. 【问链-区块链基础知识系列】 第十四课 数字货币交易所的前世、今生和未来(一)
  3. Ubuntu下查找命令
  4. java函数式编程_Java 函数式编程和 lambda 表达式详解
  5. python自定义函数实例计算1-n的偶偶数和_python用户输入一个整数N,计算并输出1到N相加的和,请问这个程序错在哪里了?...
  6. Qt数据库操作(三) -- 使用SQL模型类
  7. 网页按钮跳转位置_RPA工具BizRobo!之运用网页数据处理
  8. python爬虫scrapy框架爬取网页数据_Scrapy-Python
  9. Codeforces 1246D/1225F Tree Factory (构造)
  10. php 调用变量方法名,php中引用(变量和函数名前加符号)用法