PAT A1077 Kuchiguse
流程图
代码
//num:相同的字符个数 len1:第一个字符串的长度
//len2:第二个以及后面字符串的长度 lenmin:取前两个的最小长度
// temp1:第一个字符串 temp2:第二个及以后的字符串
//scanf与 getchar()要连着用,因为 [^\n]只判断换行符,不输入换行符
#include <cstdio>
#include <cstring>
int main(){
int N, num=0, len1, len2, lenmin;
char temp1[260], temp2[260];
//*********输入N以及前两个字符串*********//
scanf("%d", &N);
getchar();
scanf("%[^\n]", temp1);
getchar();
len1 = strlen(temp1);
scanf("%[^\n]", temp2);
getchar();
len2 = strlen(temp2);
if(len1 > len2) lenmin = len2;
else lenmin = len1;
//*********计算前两个字符串的末尾相同字符的个数*********//
for(int i=0; i<lenmin; i++){
if(temp1[len1-i-1] == temp2[len2-i-1]) num++;
else break;
}
//*********从第三个字符串开始每一个都与第一个字符串比较*********//
if(N > 2){
for(int i=2; i<N; i++){
scanf("%[^\n]", temp2);
getchar();
len2 = strlen(temp2);
for(int j=0; j<num; j++){
if(temp1[len1-j-1] != temp2[len2-j-1]) num = j;
}
}
}
//*********输出*********//
if(num == 0) printf("nai");
else{
for(int i=0; i<num; i++) printf("%c", temp1[len1 - num + i]);
}
return 0;
}
注意点
1.读取字符串是不会读入换行符的,所以在每次读取完一个字符串时,加上getchar()把换行符处理掉。
2.用scanf输入带空格的字符串也可以,不过需要把%s(遇到空格停止读入)改成%[^\n](遇到换行符停止读入)。
3.本例题也可以用reverse()来反转字符串,这样判断后缀就变成了判断前缀,逻辑上会方便很多。
问题
来源:CSDN
作者:许员
链接:https://blog.csdn.net/xiaotaijilalala/article/details/104115125