欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CodeForces 312A Whose sentence is it?

程序员文章站 2022-06-17 19:54:48
...

题目链接:CodeForces 312A Whose sentence is it?

CodeForces 312A	Whose sentence is it?
CodeForces 312A	Whose sentence is it?
cin>> 和 getline 混用需谨慎。

  • 我们先看下 cin>> 与 getline 的工作方式,流提取运算符根据它后面的变量类型读取数据,从非空白符号开始,遇到 Enter、Space、Tab 键时结束。getline函数从istream中读取一行数据,当遇到“\n”时结束返回。
  • 造成程序错误结果的原因是,用户输入完年龄后按回车结束输入,把“\n”留在了输入流里,而 cin 不会主动删除输入流内的换行符,这样换行符就被 getline 读取到,getline 遇到换行符返回,因此程序不会等待用户输入。
  • 解决的办法是手动清除换行符,在cin>>后加上 cin.ignore();,这样即可得到正确结果。
#include<iostream>
#include<algorithm>
#include<string>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>

using namespace std;
const int maxn = 1010;
int a[maxn];

int f(string str)
{
	int len =  str.length(); 
	string tmp = str.substr(len-5,5);
	if(tmp=="lala.")
		return 1;
	else
		return 0;
}

int r(string str)
{
	string tmp = str.substr(0,5);
	if(tmp=="miao.")
		return 1;
	else
		return 0;
}

int main()
{
	int n;
	cin>>n;
	cin.ignore();	//消除回车 
	string s;
	for(int i=1;i<=n;i++)
	{
		getline(cin,s);
		int l = s.length();
		
		if(l<5)
		{
			cout<<"OMG>.< I don't know!"<<endl;
			continue;
		}
		
		
		if(f(s)==1&&r(s)==0)
			cout<<"Freda's"<<endl;
		else if(f(s)==0&&r(s)==1)
			cout<<"Rainbow's"<<endl;
		else
			cout<<"OMG>.< I don't know!"<<endl;
	}
	return 0;
}