PAT A1077 Kuchiguse

穿精又带淫゛_ 提交于 2020-01-30 20:21:27

PAT A1077 Kuchiguse

流程图

Created with Raphaël 2.2.0开始输入N, 先输入前两个字符串计算前两个字符串后缀相同的字符个数, 用num表示之后每个都跟第一个比较,修改num的值num > 0?输出相同后缀(用第一个字符串以及num输出)结束输出“nai”yesno

代码

//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()来反转字符串,这样判断后缀就变成了判断前缀,逻辑上会方便很多。

问题

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!