关于Windows生成字符串数据结尾‘\r\n‘ 的处理

当出题人在Windows下生成字符串数据的时候 , Windows的默认换行符号是 \r\n , 这会导致一个很明显的问题:那就是后台数据的处理和我们本地运行的结果是不一样的!!
*

先说一个前置知识:
getchar() 可以读字符 , 可以读 \n ,\r
getline() 一个串一直读到 \n , 可以处理带空格的字符串
cin 只会读显式字符串 ,\n  \r 忽略不读

假如我的题目的输入要求是先输入一个整数 n , 然后输入 n 个含有空格的字符串,这时候我们可以用

cin >> n;
getchar();
for(int i=1;i<=n;i++) getline(cin,s);

但是,这样真的对吗,第一个数据n后面还是有一个默认的\r\n ,虽然我们在自己编译器上运行很正确(因为编译器上换行只有\n ,我们用getchar()处理了)但是后台数据在处理的时候 , getchar()读了\r , 要读入第一个字符串的getline()会把\n读进去,这样恭喜你,你的程序在后台就会少处理一条数据,但是在你的本地无事发生,都怪这个可恶的\r。
那么如何处理呢:
1.如果你是一个出题人,请避免在windows下生成字符串的数据 , 请在linux下生成字符串数据。
2.如果你是一个做题人:
(1)不是带空格的字符串读入不用getline , 因为 cin 会忽略可恶的”\r\n”,不用考虑这么多
(2)其次带空格的字符串输入

可以用getline处理,因为无论是’\r\n’ 还是 ‘\n’
getline 都能处理掉

cin >> n;
getline(cin,s);
for(int i=1;i<=n;i++) getline(cin,s);

最后可以用 python 去生成数据:

python cyaron库

你可能感兴趣的:(算法)