题目题意:找n行字符串是否有共同后缀,有则输出共同后缀,反之,则输出"nai";
注意点:cin>>会在缓冲区残留结束符,可能会影响后面的getline,因为getline是遇到结束符会默认将结束符转换成空字符储存,所以可能会导致getline第一行输入是空行的情况,所以前面有cin后面就要用cin.get()吸收,或者clear()缓冲区,还有的就是如果缓冲区第一个字符是空格,tab或者分隔符的时候,cin>>会将其忽略并且清除,cin是根据输入的状态来进行判断是否结束的,所以这就是说反话那题可以用while(cin>>s)来处理输入的字符串中的空格情况,从而能把单词储存到stack里面,所以说空格不是stack在处理,而是cin;
cin的进一步了解:C++中cin的详细用法_hbqjzx的专栏-CSDN博客
reverse(s.begin(),s.end)不用赋值,是一个操作命令;
思路:这个和三个数,n个数比较一样,你不能是有多少个数就定义多少个数然后比较吧,所以我们需要一个临时值temp来储存,比较;
代码:
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n;
string s,temp;
cin>>n;
cin.get();
for(int i=0;i<n;i++){
getline(cin,s);
reverse(s.begin(),s.end());
if(i==0){
temp=s;
continue;
}else {
int minlen=min(s.length(),temp.length());
for(int j=0;j<minlen;j++){
if(temp[j]!=s[j]){
temp=temp.substr(0,j);
continue;
}
}
}
}
reverse(temp.begin(),temp.end());
if(temp.length()==0){
temp="nai";
}
cout<<temp;
return 0;
}