PAT A1077 Kuchiguse

前言

传送门

正文

PAT A1077 Kuchiguse_第1张图片

思路

题意是读入N个字符串,输出这N个字符串最长的公共后缀子串,如果没有最长的公共后缀子串,则输出"nai",解决思路还是比较容易想到,主要注意一下坑点,cin>>对字符后面的残留在缓冲区的分隔符不做处理。举个例子

int a;
string b;
cin>>a>>b;
cin>>a;
getline(cin,b);

输入:1[enter]hello[enter] 如果是用cin>>a>>b输入的话,这样两个>>都会忽略字符前的分隔符的,结果为a=1,b=“hello”,但是如果是第二个输入的方式,则getline不会将1后面的[enter]忽略掉,它会将其读取到b中,因为是换行符,所以替换成’\0’,代表结束,则hello会被屏蔽,但是依然存放在缓冲区里,这个时候需要再来一个getline,hello就会被读取。

参考题解

#include
#include
#include
using namespace std;
/*
题意是读入N个字符串,输出这N个字符串最长的公共后缀子串,
如果没有最长的公共后缀子串,则输出"nai",首先 
使用getline(cin,str)逐行读入字符串,再将字符串翻转
,得出N个字符串中最长的字符串的长度len,再对每个字符串 
进行逐个字符遍历,若是公共字符,则加入到字符串res中,
若res.size()!=0,则表示有公共字符,所以逆序输出res,否则
直接输出nai。易错点:这里需要注意cin>>输入时,对后面残留在缓冲区
的分割符不做处理,因此额外需要使用getline(cin,s) 来读入n后面的enter换行。 
*/
int main(){
	int n,lens[100],len=-1;
	bool flag=false;
	cin>>n;
	string res,str[n],s;
	getline(cin,s);//读掉enter键 ,也可cin.get()读取换行字符
	for(int i=0;ilen)len=lens[i];//获取最长字符串的长度 (这个题直接改成获取最短的长度即可)
	}
	
	for(int i=0;i

你可能感兴趣的:(PAT甲级)